1

我有一个十六进制格式的 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

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

4

3 回答 3

0

这是 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;
    }
}
于 2013-10-14T15:12:45.620 回答
0

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

于 2013-10-14T15:08:18.293 回答
0

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

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

如果您使用 *ix,运行bc,然后键入ibase=16,,obase=2则只需键入您的号码并按 Enter。

一般来说,你真的应该知道十六进制和二进制是什么意思。如果您无法将 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
于 2013-10-14T15:13:26.973 回答