【发布时间】:2013-02-16 03:55:50
【问题描述】:
我有一个字节数组的数据,应该是跨平台一致的。假设我有一个指针unsigned char* data,它指向我数组中的某个位置,我想将 4 个字节读入一个变量。我认为我可以这样做:
uint32_t my_int = *data;
但是,我意识到该方法不考虑字节序。例如,如果我的数据是大端的,我是否必须这样做才能一致地读取它?
uint32_t my_int = (data[0] << 3) + (data[1] << 2) + (data[2] << 1) + data[3];
同样,在使用fwrite 写入此数据时,我是否必须进行相同的检查?例如,如果我使用以下代码将相同的数据写入文件:
fwrite(&my_int, sizeof(my_int), 1, fh);
生成的数据是否有任何已知的字节顺序?或者它会依赖于架构?如果是这样,在所有平台上进行这些读取和写入并强制执行特定字节顺序的最简单方法是什么?
【问题讨论】:
-
Byte 数组没有字节序...
-
@vonbrand 好吧,显然,他们当然不会,但问题是操作 with 该数组是否会受到平台字节序的影响。
-
你想做什么?如果它只是一个字节数组,那么字节序就不会成为问题。您是否尝试将 4 个字节作为整数读取?
-
如果您将字节存储到
unsigned int(或其他非chars)中,字节序将定义存储假定的值。如果您不将它们发送到其他地方,您将是安全的。要么坚持字节数组,要么小心使用htonl(3)的部落。
标签: c io endianness