比较十六进制字符串
Compare hex string
我正在尝试解码一系列十六进制字符串并检查其中的一些半字节。
在下面的示例中,我正在检查字符串 (hexString
) 并检查它的最后 5 位是否设置为真 (0x1f)。但是,它正在返回 false
。如何检查十六进制字符串的位?
const hexString = 'f0'
const areFiveLowestBitsSet = (hexString && 0x1f) === 0x1f
console.log(areFiveLowestBitsSet) // prints true
有两个问题:
您没有解析字符串来获取数字
您使用的是 &&
,这是一个逻辑运算符,而不是按位运算符 &
将数字解析为十六进制 (parseInt(hexString, 16)
) 并使用按位运算符:
let hexString = 'f0'
let areFiveLowestBitsSet = (parseInt(hexString, 16) & 0x1f) === 0x1f;
// −−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^^^^−^
console.log(areFiveLowestBitsSet); // false
hexString = '3f';
areFiveLowestBitsSet = (parseInt(hexString, 16) & 0x1f) === 0x1f;
// −−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^^^^−^
console.log(areFiveLowestBitsSet); // true
我正在尝试解码一系列十六进制字符串并检查其中的一些半字节。
在下面的示例中,我正在检查字符串 (hexString
) 并检查它的最后 5 位是否设置为真 (0x1f)。但是,它正在返回 false
。如何检查十六进制字符串的位?
const hexString = 'f0'
const areFiveLowestBitsSet = (hexString && 0x1f) === 0x1f
console.log(areFiveLowestBitsSet) // prints true
有两个问题:
您没有解析字符串来获取数字
您使用的是
&&
,这是一个逻辑运算符,而不是按位运算符&
将数字解析为十六进制 (parseInt(hexString, 16)
) 并使用按位运算符:
let hexString = 'f0'
let areFiveLowestBitsSet = (parseInt(hexString, 16) & 0x1f) === 0x1f;
// −−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^^^^−^
console.log(areFiveLowestBitsSet); // false
hexString = '3f';
areFiveLowestBitsSet = (parseInt(hexString, 16) & 0x1f) === 0x1f;
// −−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^^^^−^
console.log(areFiveLowestBitsSet); // true