Java 字符串中字节的十六进制表示

Java 字符串中字节的十六进制表示,java,hex,Java,Hex,我在某处读到字符串0123456789ABCDEFFEDCBA987654321089ABCDEF01234567是192位(24)。它是“字节的十六进制表示” 在这个概念上我需要帮助 PS:这是TripleDES算法的密钥。这只是一个大数字。您习惯使用的数字(如“192”)之间的唯一区别在于,它是使用而不是。十六进制数字系统使用16位数字(0-9和A-F),而不是使用10位数字(0-9) 这个数字相当于十进制的278982299350519144802266186024520557323196

我在某处读到字符串0123456789ABCDEFFEDCBA987654321089ABCDEF01234567是192位(24)。它是“字节的十六进制表示”

在这个概念上我需要帮助


PS:这是TripleDES算法的密钥。

这只是一个大数字。您习惯使用的数字(如“192”)之间的唯一区别在于,它是使用而不是。十六进制数字系统使用16位数字(0-9和A-F),而不是使用10位数字(0-9)


这个数字相当于十进制的2789822993505191448022661860245205573231960245295072615。

这只是一个大数字。您习惯使用的数字(如“192”)之间的唯一区别在于,它是使用而不是。十六进制数字系统使用16位数字(0-9和A-F),而不是使用10位数字(0-9)


这个数字相当于十进制的2789822993505191448022661860245205573231960245295072615。约阿希姆已经解释了这个理论概念。如果您想自己在Java中使用这些数字,请查看
Java.math.biginger

例如,要将十六进制数字转换为十进制或任何其他系统:

// the "radix" is 16 because the string represents a hexadecimal number
BigInteger bi = new BigInteger(
        "0123456789ABCDEFFEDCBA987654321089ABCDEF01234567", 16);

// print the number in decimal (digits 0-9)
System.out.println(bi.toString(10));

// print the number in octal (digits 0-7)
System.out.println(bi.toString(8));

约阿希姆已经解释了这个理论概念。如果您想自己在Java中使用这些数字,请查看
Java.math.biginger

例如,要将十六进制数字转换为十进制或任何其他系统:

// the "radix" is 16 because the string represents a hexadecimal number
BigInteger bi = new BigInteger(
        "0123456789ABCDEFFEDCBA987654321089ABCDEF01234567", 16);

// print the number in decimal (digits 0-9)
System.out.println(bi.toString(10));

// print the number in octal (digits 0-7)
System.out.println(bi.toString(8));
3个(十六进制)键又名
3*8
字节或
3*8*8=192


3个(十六进制)键,即
3*8
字节或
3*8*8=192
位。

在十六进制数中,有16个不同的数字。这些符号首先使用十进制数字0到9的普通10个符号写入。然后使用拉丁字母表的前六个字母,即A到F

由于每个数字代表0到F范围内的一个值,即16种可能性中的一种,因此它包含四位信息。因此,在一个长的十六进制数字串中,您可以计算出信息的总位数仅为当前位数的四倍

您的示例字符串“0123456789ABCDEFFEDCBA987654321089ABDEF01234567”是48位数字。这意味着它是一个48*4=192位的十六进制数字


如果你想把这个大数字看作一个字节序列,只需要取几对数字,因为每个字节是8位。第一个字节(从左边开始计数)变成
0x01
0x23
0x45
,依此类推。

在十六进制数中,有16个不同的数字。这些符号首先使用十进制数字0到9的普通10个符号写入。然后使用拉丁字母表的前六个字母,即A到F

由于每个数字代表0到F范围内的一个值,即16种可能性中的一种,因此它包含四位信息。因此,在一个长的十六进制数字串中,您可以计算出信息的总位数仅为当前位数的四倍

您的示例字符串“0123456789ABCDEFFEDCBA987654321089ABDEF01234567”是48位数字。这意味着它是一个48*4=192位的十六进制数字


如果你想把这个大数字看作一个字节序列,只需要取几对数字,因为每个字节是8位。第一个字节(从左开始计数)变成
0x01
0x23
0x45
,依此类推。

十六进制中的每个字符对应4位。例如,有48个字符,48*4=192位。

十六进制中的每个字符对应4位。例如,有48个字符,48*4=192位。

关于第二个问题:JVM如何区分不同基数的数字

它没有也不能这样做!作为程序员,您必须支持JVM。如果指定小常量,则使用前缀来表示十进制、八进制或十六进制基数:

// A leading zero signals a constant in octal base;
// octal 46 is decimal 38
final int n1 = 046;

// A leading "0x" signals a constant in hexadecimal base;
// hex 3f is decimal 63
final int n2 = 0x3f;

// No prefix refers to a regular decimal number
final int n3 = 12;
只有八进制、十进制和十六进制的前缀,因为程序员最常用这些前缀。注意,二进制常量没有前缀

如果您使用
java.math.biginger
类,就像我在前面回答第一个问题时所做的那样,那么您必须在构造函数中指定基:

// input numbers in octal, decimal, and hexadecimal;
// Java needs your help to recognize the base!
final BigInteger b8 = new BigInteger("12345", 8);
final BigInteger b10 = new BigInteger("12345", 10);
final BigInteger b16 = new BigInteger("12345", 16);

// output them in decimal system
System.out.println(b8.toString()); // prints "5349"
System.out.println(b10.toString()); // prints "12345"
System.out.println(b16.toString()); // prints "74565"

关于第二个问题:JVM如何区分不同基数的数字

它没有也不能这样做!作为程序员,您必须支持JVM。如果指定小常量,则使用前缀来表示十进制、八进制或十六进制基数:

// A leading zero signals a constant in octal base;
// octal 46 is decimal 38
final int n1 = 046;

// A leading "0x" signals a constant in hexadecimal base;
// hex 3f is decimal 63
final int n2 = 0x3f;

// No prefix refers to a regular decimal number
final int n3 = 12;
只有八进制、十进制和十六进制的前缀,因为程序员最常用这些前缀。注意,二进制常量没有前缀

如果您使用
java.math.biginger
类,就像我在前面回答第一个问题时所做的那样,那么您必须在构造函数中指定基:

// input numbers in octal, decimal, and hexadecimal;
// Java needs your help to recognize the base!
final BigInteger b8 = new BigInteger("12345", 8);
final BigInteger b10 = new BigInteger("12345", 10);
final BigInteger b16 = new BigInteger("12345", 16);

// output them in decimal system
System.out.println(b8.toString()); // prints "5349"
System.out.println(b10.toString()); // prints "12345"
System.out.println(b16.toString()); // prints "74565"

除非你不想让“我们”破解钥匙,否则将给予帮助;)对不起,有什么问题吗?我在读一篇关于TripleDES加密的教程(),其中写了这个密钥。学习目标人。对不起,塔希尔,我真的想,你需要对TripleDES本身的帮助。我认为你不能再称之为关键秘密了…:如果你不想让“我们”破解钥匙,就应该给予帮助;)对不起,有什么问题吗?我在读一篇关于TripleDES加密的教程(),其中写了这个密钥。学习目标人。对不起,塔希尔,我真的想,你需要对TripleDES本身的帮助。我认为你不能再称之为关键秘密了…:这到底是什么回报?Java中是否有任何数据类型可以处理192位长的整数。请原谅我的无知,我是一个.net的家伙。BigInteger是这个数据类型。它可以有效地容纳任意的大数据