"123"=> [49, 50, 51] 然而,将 long 转换为 String -6ren">
gpt4 book ai didi

java - 将 long 转换为 "byte-array-ed"文本,无需堆分配

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:52 26 4
gpt4 key购买 nike

我想在 Java 中将(正)原语 long 转换为文本形式的 byte[]

例如,一个简单的方法是:123 => "123"=> [49, 50, 51]

然而,将 long 转换为 String 会在堆上分配一个 String,我正试图为我的无 GC 库避免这种情况。我宁愿直接在预先分配的字节数组上呈现它。

因此,我的问题是如何直接从 long 转到 byte[] 表示,如果我使用 String 构造函数调用它(对于上面的示例)会给我“123”。澄清一下,我不打算将 long 编码为二进制形式的 byte[],而是文本形式。

谢谢!N

最佳答案

这个简单的程序:

long l = 123;
int size = (int)(Math.log10(l)+1);
byte[] array = new byte[size];
for (int i = 0; i < size; i++) {
long temp = (long) Math.pow(10, size - i - 1);
array[i] = (byte) ((l / temp) + 48);
l = l % temp;
}
System.out.println(Arrays.toString(array)); // [49, 50, 51]

我也针对当前时间(以毫秒为单位)对其进行了测试,并且按预期工作:

long l = System.currentTimeMillis();
...
System.out.println(Arrays.toString(array));

输出:

1406485727149
[49, 52, 48, 54, 52, 56, 53, 55, 50, 55, 49, 52, 57]

关于java - 将 long 转换为 "byte-array-ed"文本,无需堆分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com