java - 将 US-ASCII 编码字节转换为整数并返回

标签 java byte int

我有一个大小为 2,3 或 4 的字节数组。我需要将其转换为正确的整数值。我还需要反向执行此操作,即将 2,3 或 4 个字符的整数转换为字节数组。

例如,原始十六进制字节为:54 和 49。解码后的字符串 US-ASCII 值为 61。因此整数答案需要为 61。

stackoverflow之类的转换问题我都看过了,但是都给出了完全错误的答案,不知道是不是编码问题?

如果我这样做 new String(lne,"US-ASCII") , 其中lne是我的字节数组,我得到正确的 61。但是当这样做时 ((int)lne[0] << 8) | ((int)lne[1] & 0xFF) ,我得到了完全错误的答案。

这可能是一个愚蠢的错误,或者我完全不理解 Java 中的数字表示方案和编码/解码思想。

如有任何帮助,我们将不胜感激。

注意:我知道我可以将字符串解析为整数,但我想知道是否有一种方法可以使用快速运算(如移位和二进制算术)来代替?

最佳答案

这里有一个关于如何使用字节移位和十进制算术等快速操作来加快速度的想法。假设您有当前代码:

byte[] token;  // bytes representing a bunch of ascii numbers
int n = Integer.parseInt(new String(token));  // current approach

然后您可以替换最后一行并执行以下操作(假设没有负数、没有外语字符等):

int n = 0;
for (byte b : token)
  n = 10*n + (b-'0');

出于兴趣,这使我在海量数据集上的速度提高了大约 28%。我认为这是因为不必分配新的 String 对象,然后在每次 parseInt 调用后将它们丢弃。

关于java - 将 US-ASCII 编码字节转换为整数并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6974335/

相关文章:

java - 如何将 CLI 参数传递给 Cucumber Java 测试套件?

java - 编写无法删除的注释(VB 和 Java)

java - 如何在 Tomcat 6 中部署 war

performance - 有没有更有效的函数来查找[]字节相似度?

int 和 longs 之间的 java 乘法给出 0

Java Eclipse : My code's output is skipping a line and I don't know why

java - 将字符串解释为打包的二进制数据,Python 与 Java

c++ - 你如何在 C++ 中将字节数组转换回 jpeg

java - 比较两个排序的 int 数组

C 赋值大于数据类型范围