Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从小端到大端_C_Memory_Endianness - Fatal编程技术网

C 从小端到大端

C 从小端到大端,c,memory,endianness,C,Memory,Endianness,看 我已经写了一个库(在little-endian机器上),它在little-endian机器上运行良好。现在我在big-endian平台上运行时,它不工作了。错误很难理解。 现在我已经理解了endianess的概念,但我仍然不明白 i want to know for making ma library for `big-endian` which changes should i take care in ma code? 我想知道哪个操作在两个端点上有不同的行为,很多事情可能需要改变

我已经写了一个库(在
little-endian
机器上),它在little-endian机器上运行良好。现在我在
big-endian
平台上运行时,它不工作了。错误很难理解。 现在我已经理解了endianess的概念,但我仍然不明白

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

我想知道哪个操作在两个端点上有不同的行为,很多事情可能需要改变(很难给出一个全面的列表:“这就是可能出错的地方”)


通常,当一个人试图直接访问整数内存的内容时(例如,使用
memcpy
,例如,
union
技巧等),会出现endianness问题。

很多事情可能需要更改(很难给出一个全面的列表:“这就是可能出错的地方”)


通常,当一个人试图直接访问整数内存的内容时(例如,使用
memcpy
例如
union
技巧等),就会出现endianness问题。

您的库是否使用二进制数据文件


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

您的库是否使用二进制数据文件


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

要指定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;

要指定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;

可能需要提供更多关于你在图书馆做什么的信息。例如,对于little endian/big endian,任何网络通信都会发生冲突。不,我没有做任何网络通信的事情……你希望我们猜测,直到你说“是的,我在做这个”吗?你的图书馆在做什么?你会犯什么错误?到目前为止,您试图找到错误的来源是什么?可能需要提供有关您在库中所做工作的更多信息。例如,对于little endian/big endian,任何网络通信都会发生冲突。不,我没有做任何网络通信的事情……你希望我们猜测,直到你说“是的,我在做这个”吗?你的图书馆在做什么?你会犯什么错误?到目前为止,您试图找到错误的来源是什么?不要忘记移位操作、指针算术、类型转换等等。但你说得对,除非他告诉我们,否则有太多的问题无法猜测他的具体问题是什么。@JesusRamos-错了。您提到的操作都是endian安全的,禁止指针转换。移位:
(n>>1)不要忘记移位操作、指针算术、类型转换等等。但你说得对,除非他告诉我们,否则有太多的问题无法猜测他的具体问题是什么。@JesusRamos-错了。您提到的操作都是endian安全的,禁止指针转换。移位:
(n>>1)