我正在尝试将char变量从big endian转换为little endian。
这正是:
char name[12];
我知道如何在大端和小端之间转换一个int,但是char会搞砸我。
我知道我必须首先将它转换为整数形式,我有。
为了转换int,这就是我使用的:
(item.age >> 24) | ((item.age >> 8) & 0x0000ff00) | ((item.age << 8) & 0x00ff0000) | (item.age << 24);
为了转换char,我想以同样的方式做,如果可能的话,只是因为这是我理解的唯一方法。
答案 0 :(得分:8)
Endianess仅影响字节顺序。由于char
正好是一个字节,因此在所有字节序格式上都是相同的。
并且作为注释:您可能想要在libc中查找endianess转换函数:
htonl, htons
ntohl, ntohs
答案 1 :(得分:4)
字节顺序(a.k.a. Endian-ness)对单字节类型没有意义。
虽然char name[12]
由12个字节组成,但其类型的大小是单个字节。
所以你不需要做任何事......
BTW,int
的大小在所有编译器上不一定是4个字节,因此您可能希望使用更通用的转换方法(对于任何类型):
char* p = (char*)&item;
for (int i=0; i<sizeof(item)/2; i++)
{
char temp = p[i];
p[i] = p[sizeof(item)-1-i];
p[sizeof(item)-1-i] = temp;
}