我在C TCP套接字服务器和C#TCP客户端之间发送数据。
从C#客户端,发送的数据是.NET框架类型System.Byte的数组,它是一个无符号的8位整数。
从C服务器,发送的数据是C类型char的数组,也是无符号的8位整数。
根据我的阅读,当处理16位以上的整数时,字节顺序是一个问题,即当你有超过1个字节时,字节的顺序是Little Endian和Big Endian。
由于我只传输8位数组,我是否需要担心字节序?到目前为止,我还没有找到一个明确的答案。
谢谢。
答案 0 :(得分:4)
你的直觉是正确的:字节序与8位整数无关;它仅适用于宽度超过一个字节的类型。
答案 1 :(得分:2)
硬件负责位字节序,或者更具体地说,位字节序在物理层中定义。例如,如果您的数据包通过以太网传输,它们将首先以低位传输。但无论如何,在接收到字节后,将按照物理层发送的方式重新组装字节。
由于您正在处理协议栈的更高层,因此您只需关心字节字节序,这意味着您不会遇到8位整数的问题。
答案 2 :(得分:1)
有两种字节顺序:
大多数时候,当你说endianness时,你会说byte-endianness。这是因为bit-endianness几乎总是big-endian,但字节字节顺序因系统而异。
使用byte-endianness,您不必担心1字节宽度的数据,正如您所怀疑的那样。
不能说bit-endianness在tcp协议中扮演了多少角色。从其他答案来看,您似乎不必担心传输层的比特字节序。