【发布时间】:2017-10-09 12:36:58
【问题描述】:
刚刚制作了一个 Python 程序,它充当 Unix 套接字的服务器,当它接收到连接时,从中读取 4 个字节。
另一方面,我制作了一个连接到服务器并将这 4 个字节发送给它的 C 程序。
文件.py
packet = connection.recv(4, socket.MSG_WAITALL)
for value in packet:
if value == '\0':
print 'A none'
else:
print value
文件.c
size_t toSend 84; // Char representation \0\0\0T
write(fd, (void *)&toSend, sizeof(toSend));
这使得 python 程序接收到错误的字节顺序。这里是输出
T
A none
A none
A none
我首先想到的是这是字节序的结果,但后来我修改了文件,让它们变成了这样。
文件.c
char abc[16];
// setting char abc to be 'ABCDEFGHIJKLMNOP' (without ending \0)
write(fd, (void *)&abc[0], 16);
文件.py
packet = connection.recv(16, socket.MSG_WAITALL)
// everything else, wasn't modified
然后打印出来:
A
B
C
...
P
所以这次它按预期收到了。有人可以指出我做错了什么吗?除非它与size_t 类型有关,否则我想不出别的。
谢谢!
【问题讨论】:
-
字节顺序与
chars 无关,我建议使用固定大小类型,即:uint32_t而不是size_t
标签: python c sockets unix endianness