У меня есть приложение, в котором входные данные представляют собой необработанный набор байтов, и я хочу видеть двухзначный шестнадцатеричный код каждого из этих байтов. Сейчас я пытаюсь получить правильный шестнадцатеричный код для одного байта. Это мой код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char hexvc; //= ascii code for hex value
char aval[2]={0xFF,0x00}; //Our raw 1 byte data. can't print actual code here
char hexv[20]; //value for output
memset(hexv,0,19); //clear output
hexvc=strtol(aval,NULL,16) & 0xFF;
if (hexvc != '\0'){
sprintf(hexv,"%02hx",hexvc);
}else{
//hexvc always equals 0. why not FFh?
strcpy(hexv,"00");
}
printf("%s\n",hexv);
return 0;
}
Я ожидал увидеть ff на экране, но вместо этого я вижу 00.
Как это исправить?
И если я изменю 0xFF
после aval[2]=
на 0x31
или '1'
(так как 1 является фактическим значением для кода ASCII 0x31), то я хочу, чтобы на экране появилось 31
.