将 int16 转换为 16 位大端二进制

Posted

技术标签:

【中文标题】将 int16 转换为 16 位大端二进制【英文标题】:Convert int16 to 16 big-endian bit binary 【发布时间】:2014-01-24 18:54:53 【问题描述】:

我有一个 short/int16 数组,我需要将其转换为填充的 16 位字符串(?)。我试过使用结构:

struct.pack('>H', 545)

我得到的:

'\x02!'

而我需要格式化为 16 位的东西。

有人知道怎么做吗?我很困惑,对二进制系统几乎一无所知。

干杯

【问题讨论】:

该字符串包含两个字节,0x020x21。这两个字节为您提供了 545 的 16 位大端表示。这不是您想要的吗? 【参考方案1】:

16 位。 '\x02' 是 8 位,! 是另外 8 位。

您在寻找'0000001000100001' 吗?如果是这样,您可以使用 format 函数:

>>> format(545, '016b')
'0000001000100001'

0 表示“用零填充”,16 表示“至少显示 16 位数字”,b 表示二进制。

如果你不需要零填充,你可以使用bin

>>> bin(545)
'0b1000100001'
>>> bin(545)[2:]
'1000100001'

【讨论】:

只是为了更清楚: 545 十进制 -> 00000010 00100001 二进制。 00000010 -> 0x02, 00100001 二进制 -> 33 十进制 -> ! ascii 啊,是的,但我需要将其格式化为1000100001?我需要“完整”表示吗? @JamesBrennan:你的意思是'1000100001',还是'0000001000100001'?你确定你知道你想要什么吗?你能给我们一些背景信息吗? 嗨,是的!就是这样。我不是特别清楚。我需要 16 长度表示,因为二进制表示数据质量的描述性表示(例如,第 4 位(16?)表示模型有效性)。

以上是关于将 int16 转换为 16 位大端二进制的主要内容,如果未能解决你的问题,请参考以下文章

二进制协议设计记录

将 16 位二进制值转换为八进制

是否可以将 16 位二进制数转换为两个字符并将其保存到文本文件中?

16进制到byte转换

c++ 如何将string类型的二进制转换为16进制?

Qt如何将串口接收到十六进制转换为十进制,用这个函数不行int hex = str.toInt(&ok, 16);