【问题标题】:Handling 32 byte integer in the hex format以十六进制格式处理 32 字节整数
【发布时间】:2013-10-22 03:49:30
【问题描述】:

我有一个十六进制格式的 32 字节整数,例如: 0xAB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34

如何将其显示为以 2 为底的表示法?我不完全理解如何以给定格式实现 int。

【问题讨论】:

  • 十六进制只是显示数值的一种方式。您可以轻松地将其显示为十进制(基数 10)、八进制(基数 8)或您选择的任何基数。如果该数字存储在使用二进制内存的设备中,它已经是基数 2,所以你的问题不清楚。您只是想以二进制表示法显示它的值吗?
  • @CareyGregory:是的,我想显示它的 base-2 等价物。
  • 您使用什么语言/工具?
  • @arshajii:我基本上使用 Java。但是,我只想要它的 base-2 表示法,因为我正在处理一个装配项目。因此,我不想使用任何预定义的库等。

标签: integer hex byte


【解决方案1】:

这是 C++,但它应该给你的想法。

unsigned char bytes[32] = { 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34 };

for (int i = 0; i < 32; i++)
{
    unsigned char byte = bytes[i];
    for (int j = 0; j < 8; j++)
    {
        printf("%u", (byte & 0x80) >> 7);
        byte <<= 1;
    }
}

【讨论】:

  • 那么,最后,我将拥有 256 个 0s 和 1s?
  • @PalakArora - 是的。 32 字节 x 8 位 = 256。
【解决方案2】:

取十六进制数的每个数字,并使用哈希表将其转换为二进制(以 2 为底)数,即 A 将变为 1010b。二进制数应在左侧添加零,使其为 4 个字符,即应为“11”,不是“0011”。你可以使用一个数组,但你必须取字符的序数,如果它等于或低于 57,则减去 48(这样“9”,序数 57 将变为整数 9)。同样,较低的值将成为相应的整数。但是“A”在序数65,所以如果序数大于或等于65,则减去50,这样“A”就变成整数10。你的数组将是"0000", "0001", "0010", "0011", "100", ...,这样当任何整数被索引时,将返回相应的二进制(base-2)表示。

【讨论】:

  • 所以 base-2 数字(在上述情况下)将有 256 个字符,由 0s 和 1s 组成?
  • @PalakArora 是的,十六进制的每个数字都有 16 个可能的值,因此每个十六进制数字都有 4 个二进制数字,因此二进制表示将使用 256 个字符。您可能想阅读这个简单的维基百科条目:simple.wikipedia.org/wiki/Base_(mathematics)
【解决方案3】:

我想你只需要知道如何将十六进制转换为二进制即可。

如果您使用的是 Windows (7),只需打开计算器,将视图设置为程序员,选择“十六进制”,输入您的数字,然后选择“bin” - 或者只是观看显示更新。

如果您使用 *ix,请运行 bc,然后输入 ibase=16obase=2,然后只需输入您的号码并回车即可。

一般来说,您真的应该知道十六进制和二进制的含义。如果您无法将 0-15 的基本值从一种转换为另一种,那么您就错过了成为程序员的最核心部分。理解这一点很重要。二进制 - 几乎所有数字逻辑都基于的数字系统 - 仅由 0 和 1 组成。十六进制实际上只是二进制的简写。不是存储base2,而是存储base16。由于 16 = 2^4,因此可以将 4 位压缩为一个十六进制代码。

0x0 = 0000 = 0
0x1 = 0001 = 1
0x2 = 0010 = 2
0x3 = 0011 = 3
0x4 = 0100 = 4
0x5 = 0101 = 5
0x6 = 0110 = 6
0x7 = 0111 = 7
0x8 = 1000 = 8
0x9 = 1001 = 9
0xA = 1010 = 10
0xB = 1011 = 11
0xC = 1100 = 12
0xD = 1101 = 13
0xE = 1110 = 14
0xF = 1111 = 15

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 2021-12-02
    • 2021-09-18
    • 2015-01-13
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多