python中的bytearray使用十六进制值

时间:2017-01-12 13:17:40

标签: python arrays hex byte

我想在处理字节时使用十六进制值。但是,我不太确定如何做到这一点。例如:

>>> bytearray([0x10,0x20,0x30])
bytearray(b'\x10 0')

为什么忽略0x200x30

2 个答案:

答案 0 :(得分:1)

0x200x30不会被忽略:bytearray格式化为ASCII字符,而0x20恰好是空格的ASCII代码({{1} } {},映射到零(0x30)。

这只是一种表示二进制数组的简洁方法。您可以在此Wikipedia article中阅读所有值及其对应的字符。

如果字符可打印,则格式为0,其中\x??为十六进制代码。

答案 1 :(得分:1)

他们不被忽视。 var countObj = [{ 2: 1 }, { 2: 4, 5: 1 }, { 3: 3 }], finalObj = {}, primes = [2, 3, 5] countObj.forEach(o => primes.forEach(k => k in o && (finalObj[k] > o[k] || (finalObj[k] = o[k])))); console.log(finalObj); // { 2:4, 3: 3, 5: 1 }是空格的ASCII代码点,0x20是数字0x30。两个都在输出中,跟在0字节之后。

您看到的是字节值的表示,它尽量可读。它通过将可打印ASCII范围内的任何字节显示为该ASCII字符来实现。任何不可表示的内容都显示为\x10转义序列或较短的两个字符\xhh转义(例如换行符为\?或制表符字符为\n)。

请注意,Python为每个\t十六进制表示法生成一个整数值;它只不过是产生相同整数值的替代语法。您也可以使用十进制表示法或八进制表示法,结果将是相同的;您将整数值放入0xhh对象,然后从中创建list对象。在此过程中,原始十六进制表示法未保留

bytearray

>>> [0x10, 0x20, 0x30] [16, 32, 48] >>> bytearray([16, 32, 48]) bytearray(b'\x10 0') >>> [0o20, 0o40, 0o60] [16, 32, 48] >>> bytearray([0o20, 0o40, 0o60]) bytearray(b'\x10 0') 中的实际值仍然是整数;如果您索引到对象,则获得单个字节值:

bytearray