【问题标题】:String to byte in javajava中的字符串到字节
【发布时间】:2016-02-13 16:24:49
【问题描述】:

我在将String(包含十六进制值)转换为byte 时遇到问题。就像下面的代码。

String hexaString = "0xA1";
byte hexaByte = (byte)hexaString;

无法像此代码一样从字符串转换为字节(出现错误:Cannot cast from String to byte)。

但我可以这样做

byte hexaByte = (byte)0xA1; //this is giving output as -95

任何人请指导我如何像第一种方法那样做(这也输出值-95)。因为,我将从 db 获得的最后两位数,我需要将其转换为十六进制(附加 0x)。然后我应该以字节值的形式发送给客户端。

提前致谢!

【问题讨论】:

  • hexaString.getBytes() ? :)
  • @Shark 看起来 OP 正在尝试将值作为一个整体进行转换
  • @Shark , hexaString.getBytes() 这将给出字节数组。我想像 Reimeus 所说的那样将值作为一个整体进行转换
  • 我理解这个问题,但它可以解决无法将字符串转换为字节的问题。在转换为整数之前尝试使用无符号字节/整数。除非你在我做之前解决它,否则我会在我回家时挖掘出一些处理字节的 Java 代码宝石 :) @Reimeus 谢谢你的帮助。

标签: java string byte


【解决方案1】:

如果您需要能够使用 0x 前缀,(byte) Integer.decode("0xA1") 会做正确的事情。

【讨论】:

    【解决方案2】:

    你可以这样做:

    byte hexaByte = Byte.parseByte("1A", 16);
    

    其中 16 是基数(系统编号的基数),但如果数字大于 127,则会导致 NumberFormatException。

    【讨论】:

    • 我用“A1”值试过这个。它给出了例外
    • 因为十六进制的 A1 是十进制的 161,它大于 127。
    • 你可以试试:byte hexaByte = (byte)Integer.parseInt("A1", 16);但它返回错误的值 -95
    • 需要将其解析为无符号。
    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2017-06-15
    • 2017-04-22
    相关资源
    最近更新 更多