【问题标题】:Java hex byte array converting to integer without converting to String firstJava十六进制字节数组转换为整数而不先转换为字符串
【发布时间】:2019-02-28 18:51:57
【问题描述】:

我正在尝试转换包含十六进制值的字节数组。

byte[] bytes = {48, 48, 48, 48, 48, 51, 51, 99}

例如:48, 48, 48, 48, 48, 51, 51, 99 是 0000033c 转换成 int 是 828。 转换的唯一方法是将其转换为 String,然后从 String 中解析整数。

 public static int ConvertValueFromBytes(byte[] bytes)
    {
        String b = new String(bytes);
        return Converter.ConvertHexToInt(b);
    }

这里的主要问题是性能,多次调用会导致性能问题。当尝试从字节数组解析 int 值时,我得到大量数字,这就是我从 String 解析以获得正确值的原因。 有没有更好的方法或解决方案?

【问题讨论】:

  • 你的逻辑中有些东西没有加起来。为什么要将十六进制值字符串表示存储在字节数组中?你的字节数组应该看起来像这样:byte[] bytes = {0, 0, 3, 60},或者甚至只是{3, 60}
  • 我有一个大的一串十六进制值,其中包含多达 2000 多个字符。我正在做的是将它们分成更小的部分以获得 int 值。
  • @TimBiegeleisen 我不需要字符串值,我需要整数。
  • 没有必要基于你的十六进制字符串的字符值。每两个字符代表一个字节,所以你应该这样解析它们。

标签: java arrays int hex byte


【解决方案1】:

虽然不清楚为什么要以这种方式表示数据,但无需使用字符串即可轻松转换:

int v = 0;
for (byte b : bytes) {
  v = 16 * v + Character.getNumericValue(b);
}

Ideone demo

【讨论】:

  • 这种工作和解析负值也是如此。你能解释一下这个for循环是如何工作的吗?
  • 0x123(((1) * 16 + 2) * 16) + 3
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2019-02-12
相关资源
最近更新 更多