假设我有一个十六进制值 0x78。我需要将 1 添加到前 4 位,即 3:0,然后将 2 添加到最后 4 位,即。[7:4]。此外,当我将 1 添加到 0xF 时,它不应该翻转到下一个值,并且应该保持为 0xF。同样适用于减法。到目前为止我尝试过的方法是:
$byte=0x78;
$byte2 = unpack('b4', $byte);
print "byte2 = $byte2 \n";
--> 这里的输出是 1000,所以我尝试提取前 4 位,同样我可以右移并提取后 4 位并执行操作。但是要执行加法或减法,我想将 1000 转换回十六进制格式,以便可以执行 0x8 +/- 1。为此,我尝试了:
$hex2 = sprintf('%02x', $byte2);
print "hex2 = $hex2 \n";
--> 输出为 3e8。我不明白为什么我得到 3e8 而不是 8 或 08,因为它应该只打印 2 个十六进制格式的值。
在上面的命令中当我手动输入 $hex2 = sprintf('%02x', 0b1000); 我得到正确的结果。所以 perl 把它当作一个字符串而不是一个数值。有什么方法可以将该字符串转换为二进制数吗?任何其他更简单的方法或方法都会有所帮助。