问题遇到的现象和发生背景
C语言将一个long的4个字节a b c d拆分成d c b a并且组回去,比如0x5f05变成0x055f
遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
位运算用左移8位或者用除法取模这种256来做
C语言将一个long的4个字节a b c d拆分成d c b a并且组回去,比如0x5f05变成0x055f
位运算用左移8位或者用除法取模这种256来做
可以使用位运算将long类型的4个字节拆分并组回去。
1.使用位运算:
long num = 0x5f05;
unsigned char a, b, c, d;
a = (num & 0xff000000) >> 24;
b = (num & 0x00ff0000) >> 16;
c = (num & 0x0000ff00) >> 8;
d = (num & 0x000000ff);
num = (d << 24) | (c << 16) | (b << 8) | a;
2.使用除法取模:
long num = 0x5f05;
unsigned char a, b, c, d;
a = num / (256*256*256);
num = num % (256*256*256);
b = num / (256*256);
num = num % (256*256);
c = num / 256;
d = num % 256;
num = (d << 24) | (c << 16) | (b << 8) | a;
这两种方法都能实现将long类型的4个字节拆分并组回去。位运算要比除法取模运算快。