我认为,只有当我们讨论如何存储一个值并且在复制内存时不相关时,endianess才有意义吗?
例如
如果我有一个值0xf2fe0000并将其存储在一个小端系统上 - 字节将按00
,00
,fe
和f2
的顺序存储。但是在大端系统上,字节存储为f2
,fe
,00
和00
。
现在 - 如果我只是想将这4个字节复制到另外4个字节(在同一个系统上),在一个小端系统上我最终会得到另外4个字节,包含00
,{{1 }},00
和fe
按此顺序?
或者在内存中复制这些字节时,字节顺序是否有效?
答案 0 :(得分:7)
字节顺序仅与两种情况相关
答案 1 :(得分:4)
回答问题标题。
假设'int'为4个字节
union{
unsigned int i;
char a[4];
};
// elsewhere
i = 0x12345678;
cout << a[0]; // output depends on endianness. This is relevant during porting code
// to different architectures
那么,它不是关于复制(单独)?这是关于你如何访问的?
通过网络传输原始字节时也很重要!
Here's以编程方式查找字节序的信息
答案 2 :(得分:3)
没有在同一台机器上工作时,只要在小端机器和大端机器之间传输二进制数据时,就不必担心字节顺序
答案 3 :(得分:3)
memcpy不知道它在复制什么。如果必须复制43 61 74 00
,则不知道它是复制0x00746143还是0x43617400或浮动或"Cat"
答案 4 :(得分:2)
基本上,只有当您需要 在字节顺序不同的体系结构之间传输二进制数据 时,才必须担心字节序。
但是,当您在体系结构之间传输二进制数据时,您还必须担心其他事情,例如整数类型的大小,浮动数字的格式和其他讨厌的头痛。
答案 5 :(得分:0)
是的,您正确地认为在存储或传送当前“范围”之外的二进制值时,您应该知道字节序。
一般来说,只要一切都在你自己的程序中,你就不必担心。
如果您复制内存,请记住您要复制的内容。 (如果存储long
值并阅读ints
),则可能会遇到麻烦
请查看htonl(3)
或有关网络编程的书籍,以获得一些很好的解释。
答案 6 :(得分:0)
Memcpy仅复制字节,并不关心字节序。 因此,如果您要将一个网络流复制到另一个网络流,请使用memcpy。