小端结果

时间:2014-03-27 00:44:28

标签: c arrays pointers endianness

好的,用这段代码我试图得到一个输出 为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;
    }

1 个答案:

答案 0 :(得分:2)

您的平台使用已签名的char,当您拨打int时,该printf会被提升为printf,并带有符号扩展名。要解决此问题,请在(unsigned char) str[i]行中使用printf(" %.2x\n\n", (unsigned char) str[i]); ,因此:

{{1}}