在C中将char从big endian转换为little endian

时间:2014-02-13 17:59:05

标签: c char endianness

我正在尝试将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,我想以同样的方式做,如果可能的话,只是因为这是我理解的唯一方法。

2 个答案:

答案 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;
}