Python sprintf和memset操作

2024-09-29 23:25:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把C++中的代码的特定部分转换为Python 但我在用python执行memset和sprintf等操作时遇到了麻烦。 有人能帮我做同样的事吗Python。我的代码如下。在

send(char* data)
{
/** COnvert From here **/
packetLength=strlen(data);
dataBuffer = new char[packetLength];
memset(dataBuffer, 0x00, packetLength);

char headerInfo[32];
memset(headerInfo, 0x00, sizeof (headerInfo));
sprintf(headerInfo, "%d", packetLength);

memcpy(dataBuffer, headerInfo, 32);
memcpy(dataBuffer + 32, data, packetLength);
/** Upto Here **/
//TODO send data via socket
}

这些事我都试过了

^{pr2}$

Tags: 代码fromsendconvertnewdataherechar
1条回答
网友
1楼 · 发布于 2024-09-29 23:25:16

Python中的sprintf是通过使用%或{}来实现的,例如:

headerInfo = '%d' % packetLength
# or,
headerInfo = '{0:d}'.format(packetLength)
# or even
headerInfo = str(packetLength)

类似memset的运算可以通过乘法来完成,例如:

^{pr2}$

但是,它们的行为并不像您期望的那样,因为字符串是不可变的。你需要做一些事情,比如:

headerInfo = str(packetLength)
headerInfo += '\0' * (32 - len(headerInfo)) # pad the string
dataBuffer = headerInfo + data

或者使用struct模块:

import struct
dataBuffer = struct.pack('32ss', str(packetLength), data)

32s格式字符串将左对齐字符串并填充NUL字符。)


如果您使用的是python3,那么您必须注意字节与字符串的关系。如果您正在处理网络套接字等,您需要确保所有内容都是字节,而不是unicode字符串。在

相关问题 更多 >

    热门问题