我有一个大小为 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/