即使二进制已签名,这个过程也会改变吗?还是我们使用相同的方法将字符串转换为十六进制?
取无符号二进制值1111 0110,将其转换为十六进制时,我们得到值F6。要转换回来,我们只需将每个十六进制值转换回二进制值即可。所以 F(十进制 15)是 1111,6 是 0110。
即使字符串 1111 0110 有符号,这个字符串的值还是 F6 吗?
二进制字符串的数值始终相同。然而,我们可以用不同的方式解释它们,这将使它们代表不同的数字。所以位串 1001 的数值是 5。但是如果我说,从现在开始位串的第一位就是它的符号; 1 为 -,0 为 +,则 1001 被解释为 -1。但如果使用的解释是“二进制补码”,那么 1001 就是 -7。
现在,如果我正确理解了根本问题,那就是,
即使二进制在某种约定下被解释为带符号的数字,通过将每组 4 个二进制数字转换为一个十六进制数字来将二进制转换为十六进制的技巧是否有效?
答案是否定的,但在某些情况下,您可以调整此技巧以适应表示形式。
不是证明,但为了帮助说服自己,您可以尝试上面的示例:
如果我将 1001 解释为 -001,则 1001 = -1。将 1001 视为 -001 = -0001,我们可以轻松地将 0001 转换为 0x1(这里我使用 0x 来表示 1 是十六进制的),因此只需多做一点工作来适应二进制解释,它就可以工作。
如果我有一个用
,我根本无法应用它,因为它是对字符串每个位的值的完全不同的解释。 通过二进制补码解释,我可以按照算法将字符串解释调整为其二进制值,然后用技巧将其转换为十六进制。
回答你的问题的正确方法是解释为什么这个技巧有效,但为此你可以看看
在数学堆栈交换上的这个问题