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

Posted

技术标签:

【中文标题】如何将字符串(字节数组作为字符串)转换为短字符串【英文标题】:How to convert String (byte array as string) to short 【发布时间】:2019-03-02 11:52:09 【问题描述】:

您好,我想将字节数组,即 0x3eb 转换为短格式,因此我将 0x3eb 视为字符串并尝试转换为短格式,但它会抛出 Numberformat 异常......请帮助我

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();

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

提前致谢

【问题讨论】:

【参考方案1】:

查看parseShort的doc:

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

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

试试:

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

【讨论】:

【参考方案2】:

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

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

这里 16 是基数。更多信息请参阅文档here。

更新

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

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

【讨论】:

bro 转换后显示 o/p 为 3eb 的 1003。但事情是我想从文件中获取“0x3eb”,然后我需要在主代码中更新这个十六进制值......所以如果我转换 3eb 它显示 1003......当需要更新时我需要更新为“0x3eb” ....我怎样才能做到这一点..?例如--> static final short PRODUCT_ID1 =0x3eb; @Ravikiran 您的意思是您只需要将十六进制值作为字符串获取,更新该值,然后在其他地方再次将其用作十六进制字符串吗?如果是这种情况,您可以使用 Integer.parseInt(hexString.substring(2), 16) 将十六进制字符串转换为 int,然后更新该值,然后使用 Integer.toHexString(updatedInt) 将其转换回十六进制字符串 兄弟我有一些文本文件,用户将以十六进制形式存储输入(即 0x3eb)。我将使用 fileinputstream 获取这些数据并将数据存储为字符串。现在实际上我想将此字符串(即 0x3eb)更新到我的代码中,即作为此变量的 Short(十六进制字节)-> static final short PRODUCT_ID1 = 0x3eb;那我怎么能做到这一点..?我从用户文本文件收到的相同数据必须更新为上述变量 PRODUCT_ID1。 @Ravikiran 短数据类型的值只能在 -32,768 和 32,767 之间。它不能直接保存0x3eb,但它可以保存它的等效十进制值。这就是为什么当您将其解析为 short 变量并打印时,它会显示 1003,这是 0x3eb 的十进制等价物。这说明清楚了吗? 不用担心,@Ravikiran :) 如果它帮助您回答了您的问题,请接受。谢谢!【参考方案3】:

你必须从头剪掉“0x”:

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

【讨论】:

【参考方案4】:

关注此文档,这可能会对您有所帮助String to byte array, byte array to String in Java

【讨论】:

仅链接的答案没有用,因为 URL 可能会随着时间的推移而变得陈旧,这会使您的答案对未来的读者毫无用处。你应该添加一个解释。

以上是关于如何将字符串(字节数组作为字符串)转换为短字符串的主要内容,如果未能解决你的问题,请参考以下文章

转换流

将字节数组转换为字符串并返回字节数组的问题

转换流:InputStreamReaderOutputStreamWriter

将表示 UCHAR 数组的 json 字符串响应转换为字节数组

将字符串转换为短 C# 时出现格式异常

Java之字节数组和字符串的转换问题