![]() |
1
11
一般来说,当从一台计算机向另一台计算机传输大于一个字节的整数时,您需要担心endianness(字节顺序)。在C/C++中,这意味着如果你发送的东西类似于16位、32位或64位整数,则需要首先将整数转换为
网络字节顺序
,(也称为big endian)。接收端的计算机必须将输入的整数转换为
主机字节顺序
,这是主机本机使用的任何字节顺序。通常使用
请注意,在发送ascii或utf-8文本时不需要担心端点,因为这些格式由单个字节的序列组成,而不是由多字节数据类型组成。 |
![]() |
2
2
如果要在两台具有不同端点的计算机之间传输二进制数据,您可能需要担心。 网络套接字只会以不变的方式发送数据。如果其他机器假设它发送的字节是按特定顺序发送的,则必须对其进行管理。 如果要以已知格式(如图像)传输数据,则图像格式通常会在标题中显示数据的写入顺序,并且读写器库将对其进行处理。 如果你正在发明你自己的二进制格式-那就取决于你了。您可能还需要考虑大小,另一台机器上的int是多少字节? 好消息是,大多数机器都是intel,对于大多数应用程序来说,以ascii格式传送少量数据是可行的。 |
![]() |
3
1
这里有一个简单的测试Big Endianness,如果你想要的话: //此测试假定int大小至少为2。 静态const int testvalue=1; #define是\u bigendian()。(( (炭) )&测试值(amp;T)==0) bool cd_is_bigendian(无效) { 返回是_bigendian(); } |
![]() |
4
1
我知道这是很久以前的答案了,但我只是想补充一下。 您可以使用 QDataStream 功能(带 任何 秋德维),也就是 许多的 在我看来更简单更直观。当然,这会使您锁定在发送方和接收方上使用qdatastream,但在这种情况下这是值得的。 示例用法,对于其他人发送图像的示例:
|
![]() |
5
0
英特尔CPU使用小Endian。其他大部分都是大端的。默认的网络字节顺序是big endian。 要测试endianness是否有问题,请发送值0x12345678并检查其是否与0x78563412相同。如果接收计算机上的值是后一个值,则两个系统之间的端点不相同。 检查 this wikipedia article 关于Endianness的信息。 |
![]() |
DELI · 如何在QML中修改TableView数据? 2 年前 |
![]() |
joshp · Pysides6列从设置向后跨距 3 年前 |
![]() |
MingMing · C++在MaCOS 11上显示权限对话框 3 年前 |
![]() |
K.Mulier · PyQt5:如何将QObject移动到主线程? 6 年前 |