你好,我想转换字节数组,即0x3eb为短,所以我认为0x3eb为一个字符串,并试图转换为短,但它抛出的数字格式例外...有人请帮我
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();
但我没有找到任何解析字节短的实现。
提前致谢
由于您使用的字符串值是十六进制值,要将其转换为short,您需要使用子字符串删除0x
并传递基数,如下所示:
Short.parseShort(yourHexString.substring(2), 16)
这里16是基数。更多信息,请参阅doc here。
更新
由于OP要求进一步澄清,请添加以下信息。
short数据类型的值只能在-32,768和32,767之间。它不能直接保存0x3eb,但它可以保存它的等效十进制值。这就是为什么当你将它解析为短变量并打印时,它显示1003,这是0x3eb的十进制等效值。
参见doc的parseShort
:
将字符串参数解析为带符号的十进制short。字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号' - '('\ u002D')表示负值或ASCII加号'+'('\ u002B')表示正值。
要解析的字符串应该只包含十进制字符和符号字符,它不能包含0x
前缀。
尝试:
String ss="3eb";
Short value = Short.parseShort(ss, 16);
你必须从头开始剪切“0x”:
short.parseShort(yourHexString.Substring(2), 16)
按照这个文件,这可能会帮助你String to byte array, byte array to String in Java