Я хотел бы знать, смогу ли я обойтись без использования printf для печати 32-битных входящих двоичных данных из микроконтроллера в виде шестнадцатеричного числа. Я уже собрал биты в большую целочисленную переменную, и я пробую опцию «% x» в printf, но все, что мне кажется, это 8-битные значения, хотя я не могу сказать, является ли это ограничением для printf или моего микроконтроллера на самом деле возвращает это значение.
Вот мой код для получения данных с микроконтроллера:
printf("Receiving...\n");
unsigned int n=0,b=0;
unsigned long lnum=0;
b=iolpt(1); //call to tell micro we want to read 32 bits
for (n=0;n<32;n++){
b=iolpt(1); //read bit one at a time
printf("Bit %d of 32 = %d\n",n,b);
lnum<<1; //shift bits in our big number left by 1 position
lnum+=b; //and add new value
}
printf("\n Data returned: %x\n",lnum); //always returns 8-bits
Функция iolpt () всегда возвращает бит, считанный с микроконтроллера, и возвращаемое значение равно 0 или 1.
Является ли моя идея использовать% x приемлемым для 32-битного шестнадцатеричного числа, или я должен попытаться использовать что-то вроде "% lx" вместо "% x", чтобы попытаться представить длинный гекс, даже если это задокументировано нигде или неправильно напечатано функция для 32-битного шестнадцатеричного? Если это неправильная функция, то есть ли функция, которую я могу использовать, которая работает, или я вынужден сначала разбить свой длинный номер на четыре 8-битных числа?