我只是想问一下,我将小端存储转换成大端的方法是否正确,只是为了确保我理解了它们之间的区别。
我有一个以小端存储的数字,以下是该数字的二进制和十六进制表示:
0001 0010 0011 0100 0101 0110 0111 1000
12345678
按照大端字节序的格式,我认为字节应该被交换,像这样:
1000 0111 0110 0101 0100 0011 0010 0001
87654321
这正确吗?
此外,以下代码尝试进行此操作,但失败了。是否有明显的问题或者我能优化一些内容?如果此代码不适用于此转换,请说明原因并展示执行相同转换的更好方法。
uint32_t num = 0x12345678;
uint32_t b0,b1,b2,b3,b4,b5,b6,b7;
uint32_t res = 0;
b0 = (num & 0xf) << 28;
b1 = (num & 0xf0) << 24;
b2 = (num & 0xf00) << 20;
b3 = (num & 0xf000) << 16;
b4 = (num & 0xf0000) << 12;
b5 = (num & 0xf00000) << 8;
b6 = (num & 0xf000000) << 4;
b7 = (num & 0xf0000000) << 4;
res = b0 + b1 + b2 + b3 + b4 + b5 + b6 + b7;
printf("%d\n", res);
b1
,b2
等变量。 - lurkerhtobe32
,htonl
等。如果需要可移植性,请使用类似这样的头文件。 - legends2k