Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java或C中附加两个十六进制长值_Java_C_Hex_Append - Fatal编程技术网

在Java或C中附加两个十六进制长值

在Java或C中附加两个十六进制长值,java,c,hex,append,Java,C,Hex,Append,我正在用Java实现SHA-2算法。然而,我遇到了一个问题。我需要将两个十六进制值附加到一个十六进制值中,但我无法这样做。我尝试将两者作为字符串追加,并使用Long.parseLongappendedString,但这会导致数字格式异常。我是否可以用Java实现这一点?如果不是的话,在C中是否有这样做的方法,我将在C中实现它?谢谢你的阅读 代码如下: String temp = h[0] + "" + h[1]; //Where h[0] and h[1] are two hex val

我正在用Java实现SHA-2算法。然而,我遇到了一个问题。我需要将两个十六进制值附加到一个十六进制值中,但我无法这样做。我尝试将两者作为字符串追加,并使用Long.parseLongappendedString,但这会导致数字格式异常。我是否可以用Java实现这一点?如果不是的话,在C中是否有这样做的方法,我将在C中实现它?谢谢你的阅读

代码如下:

    String temp = h[0] + "" + h[1]; //Where h[0] and h[1] are two hex values stored as Long
    //I also tried String temp = String.valueOf(h[0]) + String.valueOf(h[1]); but no dice
    Long appended = Long.parseLong(temp); //Number format exception here

当我说append时,我的意思是:0x6a09e667+0xbb67ae85=0x6a09e667bb67ae85

long hex1 = 0x6a09e667;
long hex2 = 0xbb67ae85;
您需要0x6a09e667bb67ae85的输出

您可以通过一些位移位来执行此操作,例如:

long result = hex2 | (hex1 << 32);

我假设您的代码如下所示:

long hex1 = 0x6a09e667;
long hex2 = 0xbb67ae85;
您需要0x6a09e667bb67ae85的输出

您可以通过一些位移位来执行此操作,例如:

long result = hex2 | (hex1 << 32);
0x6a09e667+0xbb67ae85给出的0x6a09e6670xbb67ae85无效。请尝试以下代码:

String temp = h[0] + h[1].substring( 2 ); // Strip "0x" from second string
0x6a09e667+0xbb67ae85给出的0x6a09e6670xbb67ae85无效。请尝试以下代码:

String temp = h[0] + h[1].substring( 2 ); // Strip "0x" from second string

如果您的字符串类似于0xDEA0xDBEEF,这将解释数字格式异常。“追加”是什么意思?如0x6a09e667+0xbb67ae85=0x6A09E667BB67AE85中所示,请写入h[0]和h[1]的字符串值。这很有趣。字符串结果是1779033703-1150833019 Java是否无法提供文字表示?如果字符串类似于0xDEA0xDBEEF,这将解释数字格式异常。您所说的“追加”是什么意思?如0x6a09e667+0xbb67ae85=0x6A09E667BB67AE85,请编写h[0]和h[1]的字符串值。现在这很有趣。字符串结果是1779033703-1150833019 Java不能提供文本表示吗?当我使用它时,我得到了这个结果:-4942790177982912921这是因为System.out.println的工作方式吗?@D347th是的。您需要获取println来打印结果的十六进制值,这可能可以通过一些谷歌搜索完成:@D347th不可能。长值最多只能存储64位,相反,您需要一个BigInt,IIRC可用于java。所以使用它&它是受支持的位移位函数。是的,你需要增加班次。当我使用它时,我得到了这个:-4942790177982912921这是因为System.out.println的工作方式吗?@D347是的。您需要获取println来打印结果的十六进制值,这可能可以通过一些谷歌搜索完成:@D347th不可能。长值最多只能存储64位,相反,您需要一个BigInt,IIRC可用于java。所以使用它&它是受支持的位移位函数。是的,您需要增加移位。我得到一个错误,substringint不能在原语类型上调用。我的代码仅在h是一个包含十六进制值的字符串数组时工作,正如您在问题中所写的。提问时请更加小心:始终使用数据类型包含的值,而不是您想象的数据类型中应该包含的值。也就是说,Richard的答案是正确的。我得到一个错误,substringint不能在原语类型longMy上调用。我的代码仅在h是一个字符串数组时工作,其中包含十六进制值,正如您在问题中所写的。提问时请更加小心:始终使用数据类型包含的值,而不是您想象的数据类型中应该包含的值。也就是说,理查德的回答是正确的。