|
|
1
10
到目前为止。。。只需进行基本设置并启动循环,以遍历数组中的所有字节
转换为十六进制时的字节是两个十六进制数字或8个二进制数字,具体取决于您在哪个基中查看它。上述语句将高位4位下移(>>>为无符号右移),并用0000 1111对其进行逻辑和运算,使结果为等于字节高位4位(第一个十六进制数字)的整数。 假设23是一个输入,这是二进制的0001 0111。移位使和逻辑化,并将其转换为0000 0001。
这只是将do/while循环设置为运行两次
这里我们显示的是实际的十六进制数字,基本上只是使用零或一个字符作为起点,并向上移动到正确的字符。第一个if语句覆盖所有数字0-9,第二个覆盖所有数字10-15(a-f为十六进制) 同样,使用我们的示例0000 0001,十进制数等于1。我们在上面的if块中被捕获,并将1添加到“0”字符以获得字符“1”,将其附加到字符串并继续。
现在我们将整数设置为刚好等于字节的低位,然后重复。 再说一次,如果我们的输入是23。。。0001 0111在逻辑和之后变为0000 0111,十进制为7。重复上述相同逻辑,显示字符“7”。
现在我们只需转到数组中的下一个字节并重复。
为了回答您的下一个问题,JavaAPI已经内置了一个到BigInteger的基本转换实用程序。见 toString(int radix) 文档
|
|
|
2
2
要回答这个问题:
没有。至少,与循环版本不同。新的BigInteger(…).toString(16)将不显示前导零,而以前的版本将显示前导零。通常,对于诸如写出字节数组(特别是表示哈希之类的内容)之类的内容,您需要一个固定长度的输出,因此如果您想要使用该版本,则必须适当地填充它。 |
|
|
3
1
有关比特移位的详细解释,请查看以下SO问题中的答案 What are bitwise shift (bit-shift) operators and how do they work? 他似乎试图将一个字节转换成一个小于16的数字,通过这样做,他可以很容易地用代码确定该字节代表哪个字符
|
|
|
4
0
这些内容您不必自己编写,因为它已经用apache commons编解码器编写:
在这方面有很多更有用的方法
|
|
|
Flegy · PHP/MSSQL字符串到十六进制 8 年前 |
|
|
Soumil Deshpande · 将十六进制字符串转换为可读输出 8 年前 |
|
Jahongir Rahmonov · 计算文件的校验和 8 年前 |
|
|
DenoDev · C-十六进制输出中缺少0 8 年前 |
|
|
Elie Daher · 在C中将十六进制转换为uint8\u t++ 8 年前 |
|
|
e2rabi · 如何使用Java屏蔽十六进制int? 8 年前 |
|
|
user3780807 · c++流负数转换 8 年前 |