小端到大端

时间:2011-09-22 05:59:16

标签: c memory endianness

我已经写了一个库(在little endian机器上)它在小端机器上工作正常我在big endian平台上运行时它不起作用。恐怖很难理解。 现在我理解了endianess的概念,但我仍然没有...... {/ p>

i want to know for making ma library for `big-endian` which changes should i 
take care in ma code? 

我想知道哪个操作在两个端口中都有不同的行为

3 个答案:

答案 0 :(得分:6)

很多事情可能需要改变(很难给出一个全面的清单:“这可能会出错”)。

一般情况下,当一个人试图直接访问整数的内存时(例如,使用memcpyunion技巧等),会出现字节序问题。

答案 1 :(得分:1)

要指定cnicutar提及的问题,问题的典型候选是当您通过不同类型的数组直接访问某个类型的部分时,而不是使用计算进行访问。

unsigned long int  a = 0x04030201ul;

/* Directly accesses the representation, gives 2 on LE and 3 on BE */
b = ((unsigned char *)&a)[1];

/* Works with the values, always gives 2 */
b = (a >> 8) & 0xff;

答案 2 :(得分:0)

你的图书馆是否使用二进制数据文件?

使用二进制文件时,您必须注意编写/读取数据的格式(大端与小端)。例如,当将整数数组写入文件时,它们将存储在执行写入的机器的endianess中。在阅读时,您必须考虑这种情况并在必要时转换数据。