提问:
问题遇到的现象和发生背景
C语言将一个long的4个字节a b c d拆分成d c b a并且组回去,比如0x5f05变成0x055f
遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
运行结果及详细报错内容,位运算用左移8位或者用除法取模这种256来做。
解答:
可以使用位运算来实现unsigned long类型的字节拆分和重组。
首先,可以使用位移运算符(>>和1
Malformed citation <<)将每个字节拆分出来。例如,将unsigned long x = 0x5f05; 拆分成四个字节,可以使用以下代码:
unsigned char a = (x >> 24) & 0xff; unsigned char b = (x >> 16) & 0xff; unsigned char c = (x >> 8) & 0xff; unsigned char d = x & 0xff; 然后,可以使用位或运算符(|)将这四个字节重新组合成一个unsigned long值。例如,将这四个字节重新组合为unsigned long y,可以使用以下代码:
unsigned long y = (d << 24) | (c << 16) | (b << 8) | a;
```
其中 &0xff 是将高8位置0,取最低8位,后面的位移是将数字的二进制移动到对应的位置
最后将y的值就是你要的结果了, y = 0x055f