gpt4 book ai didi

java - 如何将 long 转换为可打印字节

转载 作者:行者123 更新时间:2023-12-01 13:45:49 24 4
gpt4 key购买 nike

我有一个代表长整型的字符串。如“12345678901”(11 个字符长)。

我使用Long.parse()将其转换为long,这样就可以了。

现在,我想将这个长字符串作为短字符串发送,例如通过网络发送"eR%s"

目标是使最终字符串尽可能短。知道最好的方法是什么吗?我可以使用更多字符作为 URL 编码(就像我可以使用/、%、: 等)

最佳答案

Java 可以使用数字 0 - 9 和小写字母 a - z 处理高达 36 的基数。

> Long.toString(12345678901L, 36)
"5o6aqt1"

> Long.parseLong("5o6aqt1", 36)
12345678901

您可以使用 66 个未保留 URI 字符中的 65 个创建您自己的编码(因此您的 URI 不需要转义)。负数需要使用“-”号:

> Long65.toString(12345678901L)
"aFDIbA"

> Long65.parseLong65("aFDIbA")
12345678901

这是Long65()的代码

import java.math.BigInteger;

public class Long65 {
private static int base = 65;
private static String URIchars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.~";

public static String toString(Long aNumber) {
StringBuilder result = new StringBuilder();
if (aNumber < 0) {
result.append('-');
aNumber = -aNumber;
}
int r = (int)(aNumber % base);
if (aNumber - r == 0)
result.append(URIchars.charAt(r));
else
result.append(Long65.toString((aNumber - r) / base) + URIchars.charAt(r));
return result.toString();
}

public static long parseLong65(String aNumber) {
char[] digits;
int sign = 1;
if (aNumber.charAt(0) == '-') {
sign = -1;
digits = aNumber.substring(1).toCharArray();
} else {
digits = aNumber.toCharArray();
}
BigInteger bigBase = BigInteger.valueOf(base);
BigInteger power = bigBase.pow(digits.length);
BigInteger total = BigInteger.valueOf(0);
for (char digit : digits){
power = power.divide(bigBase);
total = total.add(power.multiply(BigInteger.valueOf(URIchars.indexOf(digit))));
}
return sign * total.longValue();
}
}

关于java - 如何将 long 转换为可打印字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20385369/

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