Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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#.NET[从C#到Java的端口]给出的结果不同_Java_C#_Hex_Byte - Fatal编程技术网

在Java中,将十六进制转换为字节数组与C#.NET[从C#到Java的端口]给出的结果不同

在Java中,将十六进制转换为字节数组与C#.NET[从C#到Java的端口]给出的结果不同,java,c#,hex,byte,Java,C#,Hex,Byte,我正在尝试将一小段代码从C#转换为Java。[我想不必说我是个傻瓜。:P] 下面的两个代码返回的结果不同,我不明白为什么。谢谢你的帮助 注:我已经检查了这个问题,但答案并不能解决我的问题 C#NET 公共类测试 { 专用静态sbyte[]十六进制字节(字符串十六进制) { 如果(十六进制长度%2==1) 抛出新异常(“二进制键不能有奇数位数”); sbyte[]arr=新的sbyte[hex.Length>>1]; int l=十六进制长度; 对于(int i=0;i>1);+i) { arr[

我正在尝试将一小段代码从C#转换为Java。[我想不必说我是个傻瓜。:P]

下面的两个代码返回的结果不同,我不明白为什么。谢谢你的帮助

注:我已经检查了这个问题,但答案并不能解决我的问题

C#NET
公共类测试
{
专用静态sbyte[]十六进制字节(字符串十六进制)
{
如果(十六进制长度%2==1)
抛出新异常(“二进制键不能有奇数位数”);
sbyte[]arr=新的sbyte[hex.Length>>1];
int l=十六进制长度;
对于(int i=0;i<(l>>1);+i)
{
arr[i]=(sbyte)((GetHexVal(hex[i>1);+i)
{

arr[i]=(byte)((GetHexVal)((char)(hex.charAt)(i问题在于您将Java代码中的第一个字符括起来。下面是您的代码:

GetHexVal((char)(hex.charAt(i << 1) << 4))
如果您让代码更简单,这将更容易理解。我会将其编写为:

private static byte[] HexToByte(String hex) {
    if (hex.length() % 2 == 1) {
        throw new IllegalArgumentException("...");
    }

    byte[] arr = new byte[hex.length() / 2];

    for (int i = 0; i < hex.length(); i += 2)
    {
        int highNybble = parseHex(hex.charAt(i));
        int lowNybble = parseHex(hex.charAt(i + 1));
        arr[i / 2] = (byte) ((highNybble << 4) + lowNybble);
    }

    return arr;
}
私有静态字节[]十六进制字节(字符串十六进制){
如果(十六进制长度()%2==1){
抛出新的IllegalArgumentException(“…”);
}
字节[]arr=新字节[hex.length()/2];
对于(int i=0;iGetHexVal((char)(hex.charAt(i << 1) << 4))
// Unnecessary cast removed
GetHexVal(hex.charAt(i << 1)) << 4
private static byte[] HexToByte(String hex) {
    if (hex.length() % 2 == 1) {
        throw new IllegalArgumentException("...");
    }

    byte[] arr = new byte[hex.length() / 2];

    for (int i = 0; i < hex.length(); i += 2)
    {
        int highNybble = parseHex(hex.charAt(i));
        int lowNybble = parseHex(hex.charAt(i + 1));
        arr[i / 2] = (byte) ((highNybble << 4) + lowNybble);
    }

    return arr;
}