我想在处理字节时使用十六进制值。但是,我不太确定如何做到这一点。例如:
>>> bytearray([0x10,0x20,0x30])
bytearray(b'\x10 0')
为什么忽略0x20
和0x30
?
答案 0 :(得分:1)
0x20
和0x30
不会被忽略: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