如何将String(字节数组作为字符串)转换为short

问题描述 投票:0回答:4

你好,我想转换字节数组,即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();

但我没有找到任何解析字节短的实现。

提前致谢

java arrays casting short typecasting-operator
4个回答
1
投票

由于您使用的字符串值是十六进制值,要将其转换为short,您需要使用子字符串删除0x并传递基数,如下所示:

Short.parseShort(yourHexString.substring(2), 16)

这里16是基数。更多信息,请参阅doc here

更新

由于OP要求进一步澄清,请添加以下信息。

short数据类型的值只能在-32,768和32,767之间。它不能直接保存0x3eb,但它可以保存它的等效十进制值。这就是为什么当你将它解析为短变量并打印时,它显示1003,这是0x3eb的十进制等效值。


2
投票

参见docparseShort

将字符串参数解析为带符号的十进制short。字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号' - '('\ u002D')表示负值或ASCII加号'+'('\ u002B')表示正值。

要解析的字符串应该只包含十进制字符和符号字符,它不能包含0x前缀。

尝试:

String ss="3eb";
Short value = Short.parseShort(ss, 16);

1
投票

你必须从头开始剪切“0x”:

short.parseShort(yourHexString.Substring(2), 16)

1
投票

按照这个文件,这可能会帮助你String to byte array, byte array to String in Java

© www.soinside.com 2019 - 2024. All rights reserved.