如果你想知道细节,你应该看看^{}(尤其是文件顶部的注释)。您的ctypes.c_byte(1)是一个Python对象:>>> import sys
>>> import ctypes
>>> isinstance(ctypes.c_byte(1), object)
True
正如@Daniel所说,sys.getsizeof得到了Python对象的大小。该Python对象大于C中相应的对象。请注意object.h注释中的以下内容:
^{pr2}$
换句话说,一个宏PyObject_HEAD附加到每个对象的开头。这会增加Python对象的大小。在
另一方面,ctypes.sizeof返回Python对象中C数据类型的实际大小(使用C的sizeof运算符)。在
编辑
鉴于您在Daniel帖子的评论中提到的目标,在python3.x中通过服务器发送一个字节是可能的。下面是一个使用Python的socket模块发送一个字节的例子来证明这一点。在
以下是服务器,您将在一个Python解释器中运行:# Server
import socket
HOST = '' # All available interfaces
PORT = 50007 # Same port as client
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
data = conn.recv(1) # receive data with bufsize 1; a larger bufsize will break this code
if not data: break
conn.sendall(data)
conn.close()
这是客户端,您将在另一个python解释器中运行:# Client
import socket
HOST = '127.0.0.1' # The remote host, but here using localhost
PORT = 50007 # The port used by both the client and server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(b'1') # a bytes object
data = s.recv(1) # Receive data from the socket with bufsize of 1
s.close()
print('Received', repr(data)) # confirm receipt