【问题标题】:Format String as an hex value and append it in char array将字符串格式化为十六进制值并将其附加到 char 数组中
【发布时间】:2014-01-24 16:37:36
【问题描述】:

我有以下代码。

String test1 = "10";
String result = String.format("%02X", test1);
char buffer[] = {result.charAt(0),0x01,0x00,0x01,0x00,0x20};
byte[] bufferbyte = new String(buffer).getBytes();
for (byte b : bufferbyte){
  System.out.format("0X%x ", b);
}

实际上字符串变量“test1”包含十进制值。我的意思是说用户可以输入 1 -256 个整数数字,它存储在“test1”中。我以 10 为例。我需要将其十六进制值(0A)附加到字符数组中,在其第一个位置“缓冲区”并将其显示为包含十六进制值的字节数组。

上面的代码显示错误为

"Exception in thread "main" java.util.IllegalFormatConversionException: x != java.lang.String"

【问题讨论】:

  • 如果你的 test1 包含整数,为什么它被声明为字符串?
  • Integer.parseInt(test1);
  • 程序的另一部分将其作为字符串接收。

标签: java binary hex decimal


【解决方案1】:

试试这个

    String result = String.format("%02X", Integer.parseInt(test1));

【讨论】:

  • 对于 test1 = "10" 它显示 "0X30 0X1 0X0 0X1 0X0 0X20 " 而它应该显示 "0X01 0X1 0X0 0X1 0X0 0X20 " 。我认为它显示 1 的 ascii 等效十六进制值
  • Java 使用 Unicode,而不是 ASCII,但事实并非如此。要将1 转换为十六进制,然后将0 转换为十六进制,还是要将10 转换为十六进制?
  • 你确定第一个元素应该是 0x01 吗?也许是 0x0A?
  • 字符缓冲区[] ={(char)Integer.parseInt(test1),0x01,0x00,0x01,0x00,0x20};这条线可以吗?我得到了结果。但徘徊如何..它将字符串转换为int然后转换为char
  • Integer.parseInt 返回 int (4bytes) char 为 2 个字节,因此 (char) 截断 int 的前 2 个字节
【解决方案2】:
public class SSCCE
{
    public static void main(final String[] args)
    {
        final String ten = "10";
        final Integer i = Integer.parseInt(ten);
        System.out.format("%02X", i);
    }
}

输出0A

您正在尝试格式化 String,您需要格式化 Integer 表示形式。

【讨论】:

    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2019-01-08
    • 2017-02-19
    • 2022-07-08
    相关资源
    最近更新 更多