2015-01-16 194 views
0

我有一些将十六进制字符串转换为字节的Java代码。它似乎很适合非常短的十六进制字符串,但标记错误,如果我使用长字符串,但我不知道为什么。我不熟悉Java和编程。随意指出我可以改进的任何其他领域。从十六进制转换为字节

这里是我的代码:

public class Hextobinary { 

static String hexToBinary(String hex) { 
    int i = Integer.parseInt(hex, 16); 
String bin = Integer.toBinaryString(i); 
return bin; 
} 

public static void main(String[] args) { 

    String h = "5F"; 
String x = hexToBinary(h); 
    System.out.println(x); 
} 

}

非常感谢

+0

“一个错误” - 哪一个? “长串” - 多久?例如,一个terabyte? – usr2564301

+1

@fdama您应该始终包含实际数据的样本(失败和成功)。你可以[编辑]你的问题吗? –

+0

@gtgaxiola道歉。我提供了错误的版本。现在更正。 – fdama

回答

3

有一个内置的这种使用DatatypeConverter,所以你可以不必自己做。

import javax.xml.bind.DatatypeConverter; 

public class HexUtils { 

    public String toHex(final byte[] arr) { 
     return DatatypeConverter.printHexBinary(arr); 
    } 

    public byte[] fromHex(final String str) { 
     return DatatypeConverter.parseHexBinary(str); 
    } 

} 
+0

感谢您的支持。我会试试这个。 – fdama

+0

嗨托德,我已经给了这个尝试,但只有第一个十六进制转换。我如何转换整个字符串的十六进制? – fdama

1

您正在将您的字符串解析为int。这将适用于较短的十六进制字符串,但不适用于较长的字符串。 int是32位或8个十六进制字符。任何比这更长的字符串将不适合int

如果您确实编写了自己的方法,然后将十六进制字符串拆分为两个字符块,并将每对字符分别处理为一个字节,并将字节存储在字节数组中。这将允许你处理更长的十六进制字符串。

+0

感谢您分享。我会给这个镜头并挑战自己。 – fdama

1

如果您使用的是大型字符串,则变量i的类型int(Integer)无法存储字符串十六进制中包含的值。整数只能存储从-80000000(十六进制)到+ 7FFFFFFF的值。任何更长的字符串都会导致函数产生错误的结果。

一个快速的解决方案是使用类型Long(和函数parseLong)而不是整数。 Long类型可以保存从-8000000000000000(十六进制)到+ 7FFFFFFFFFFFFFFF的值。但是如果你需要转换更长的字符串,这不会再起作用。

相关问题