如何将字符串(字节数组作为字符串)转换为短字符串
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