您好,我想将Byte数组(即0x3eb)转换为short,所以我将0x3eb视为字符串,并尝试转换为short,但它引发了Numberformat Exception ...有人请帮助我
import java.io.UnsupportedEncodingException;
public class mmmain
{
public static void main(String[] args) throws UnsupportedEncodingException
{
String ss="0x03eb";
Short value = Short.parseShort(ss);
System.out.println("value--->"+value);
}
}
Exception what im getting is
Exception in thread "main" java.lang.NumberFormatException:
For input string: "0x3eb" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:491)
at java.lang.Short.parseShort(Short.java:117)
at java.lang.Short.parseShort(Short.java:143)
at mmmain.main(mmmain.java:14)
即使我尝试通过
将0x3eb转换为字节byte [] bytes = ss.getBytes();
但是我没有发现任何解析字节短的实现。
预先感谢
答案 0 :(得分:2)
请参见parseShort
中的doc:
将字符串参数解析为带符号的十进制短整数。那些角色 字符串中的所有字符必须全部为十进制数字,但第一个除外 字符可以是ASCII减号'-'('\ u002D'),以表示 负值或ASCII加号'+'('\ u002B')表示 正值。
要分析的字符串只能包含小数字符和符号字符,不能包含0x
前缀。
尝试:
String ss="3eb";
Short value = Short.parseShort(ss, 16);
答案 1 :(得分:1)
由于您使用的字符串值是一个十六进制值,要将其转换为短值,您需要使用子字符串删除0x
并按如下所示传递基数:
Short.parseShort(yourHexString.substring(2), 16)
这里16是基数。在文档here中提供更多信息。
更新
由于OP要求提供更多说明,请添加以下信息。
short数据类型只能具有-32,768到32,767之间的值。它不能直接保存0x3eb,但可以保存它的等效十进制值。这就是为什么当您将其解析为short变量并进行打印时,它显示1003的原因,这是0x3eb的十进制等效项。
答案 2 :(得分:1)
您必须从一开始就剪掉“ 0x”:
short.parseShort(yourHexString.Substring(2), 16)
答案 3 :(得分:1)
遵循此文档可能会对您String to byte array, byte array to String in Java
有帮助