是否有必要使用无符号8位整数检查字节顺序?

时间:2014-04-21 19:43:34

标签: c endianness

我在C TCP套接字服务器和C#TCP客户端之间发送数据。

从C#客户端,发送的数据是.NET框架类型System.Byte的数组,它是一个无符号的8位整数。

从C服务器,发送的数据是C类型char的数组,也是无符号的8位整数。

根据我的阅读,当处理16位以上的整数时,字节顺序是一个问题,即当你有超过1个字节时,字节的顺序是Little Endian和Big Endian。

由于我只传输8位数组,我是否需要担心字节序?到目前为止,我还没有找到一个明确的答案。

谢谢。

3 个答案:

答案 0 :(得分:4)

你的直觉是正确的:字节序与8位整数无关;它仅适用于宽度超过一个字节的类型。

答案 1 :(得分:2)

硬件负责位字节序,或者更具体地说,位字节序在物理层中定义。例如,如果您的数据包通过以太网传输,它们将首先以低位传输。但无论如何,在接收到字节后,将按照物理层发送的方式重新组装字节。

由于您正在处理协议栈的更高层,因此您只需关心字节字节序,这意味着您不会遇到8位整数的问题。

答案 2 :(得分:1)

有两种字节顺序:

  • byte-endianness :多字节数据中的字节顺序
  • bit-endianness :字节内的位顺序

大多数时候,当你说endianness时,你会说byte-endianness。这是因为bit-endianness几乎总是big-endian,但字节字节顺序因系统而异。

使用byte-endianness,您不必担心1字节宽度的数据,正如您所怀疑的那样。

不能说bit-endianness在tcp协议中扮演了多少角色。从其他答案来看,您似乎不必担心传输层的比特字节序。