好的,用这段代码我试图得到一个输出 为0xBF 0xA3执行 0x61 0xf2 但是我得到了这个, ffffffbf ffffffa3 61 fffffff2
为什么结果中包含字母包括那么多的f?我还必须以大端的形式制作这个节目,那么如何“转移”结果的位置呢?
谢谢!
void extract_little(char *str,int offs, int n){
int i;
for (i = 0; i < n; i++){
printf(" %.2x\n\n", str[i]);
}
}
int main()
{
int i = 0xf261a3bf;
int ofset = 1; // This isn't actually doing anything yet
extract_little((char *)&i, ofset, sizeof(i));
return 0;
}
答案 0 :(得分:2)
您的平台使用已签名的char
,当您拨打int
时,该printf
会被提升为printf
,并带有符号扩展名。要解决此问题,请在(unsigned char) str[i]
行中使用printf(" %.2x\n\n", (unsigned char) str[i]);
,因此:
{{1}}