比方说,例如,我的URL包含以下百分比编码字符:%80
它显然不是ascii字符。
如何将此值转换为Java中相应的十六进制字符串? 我想没有luck.Result以下应该是80从编码百分比的URL中提取十六进制值
public static void main(String[] args) {
System.out.print(byteArrayToHexString(URLDecoder.decode("%80","UTF-8").getBytes()));
}
public static String byteArrayToHexString(byte[] bytes)
{
StringBuffer buffer = new StringBuffer();
for(int i=0; i<bytes.length; i++)
{
if(((int)bytes[i] & 0xff) < 0x10)
buffer.append("0");
buffer.append(Long.toString((int) bytes[i] & 0xff, 16));
}
return buffer.toString();
}
如果是你需要的'80',为什么不去掉百分号?顺便说一句,你需要什么? - 此外,请注意,Java字符是16位,即您将得到2个字节,并且根据字符,这两个字节可能不为零(即不是0x00)。 – Thomas 2011-12-27 14:02:35
我需要从kannel中提取二进制SMS的内容,URL以以下格式发送:http:// localhost:8080/rest/MO?source_no = 13013&dest_no =%2B2304232381&message =%00 +%11%15% 00%15%00%00%00%00%81S%16%FCG%D9%89%B8lQi%8D%EA%D6%F2%C1%7B%01%3DL%D9%1B%B4&UDH =%02P% 00'我需要解码消息参数。有些字符是HEX,其他字符是ASCII。我认为URLDecoder将能够做到这一点。你说得对,我可以实现这一点,但我想知道是否有任何功能可以解决这个问题。 – krishnen 2011-12-27 14:11:47
那些非ascii参数不是某些十六进制字符串的一部分,那么为什么要将它转换为十六进制呢?只需使用'URLDecoder.decode(...)',即可。我没有看到再次将'€'('%80')转换为十六进制字符串的感觉。 – Thomas 2011-12-27 14:33:54