gpt4 book ai didi

java - 如何将整数转换为 base64 (0-9A-Za-z)

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

我一直在努力减少这条路的长度。我在我的程序中表示一些整数 ID。例如

2
3
15
26
63
...
151564852

我希望他们这样表示(仅限 0-9A-Za-z)

2
3
F
Q
z
...
vDF25a //For example

我想到的方法是有 63 个 if 语句,每个语句分别从 0-63 到 0-z 的映射,对于大于 64 的任何内容,对值负 63 进行递归。

不用说,我认为我的方法非常有缺陷且不切实际。更合适的方法是什么?


更新:

根据 fge 的 建议,我已经让编码器正常工作,但是我的解码函数仅适用于最长 2 个字符串,如果字符串较大,则总和会出错。例如,对于 3840 到 3845,这是输出

// Encoded 
zw
x
zy
zz
100

// Decoded
3840
3841
3842
3843
124 //Invalid decoding

这是我的解码函数代码

public static int decode(String value)
{
String revStr = new StringBuilder(value).reverse().toString();

int sum = 0;



for (int i=1; i < revStr.length(); i++)
{
for (int j=0; j < ALPHABET.length; j++)
{
if (ALPHABET[j] == revStr.charAt(i))
{
sum += (ALPHABET.length * j) * i;
break;
}
}
}

for (int j=0; j < ALPHABET.length; j++)
{
if (ALPHABET[j] == revStr.charAt(0))
{
sum += j;
break;
}
}

return sum;
}

最佳答案

这不是 base64; base64 编码二进制数据。

无论如何,您不需要大量的if 语句;使用数组:

public final class AlphabetEncoder
{
private static final char[] ALPHABET = { '0', '1', '2', ...., 'z' };
private static final int ENCODE_LENGTH = ALPHABET.length;

public static String encode(int victim)
{
final List<Character> list = new ArrayList<>();

do {
list.add(ALPHABET[victim % ENCODE_LENGTH]);
victim /= ENCODE_LENGTH;
} while (victim > 0);

Collections.reverse(list);
return new String(list.toArray(new char[list.size()],
StandardCharsets.UTF_8);
}

public int decode(final String encoded)
{
int ret = 0;
char c;
for (int index = 0; index < encoded.length(); index++) {
c = encoded.charAt(index);
ret *= ENCODE_LENGTH;
ret += Arrays.binarySearch(ALPHABET, c);
}
return ret;
}
}

关于解码函数的注意事项:可以在此处使用 Arrays.binarySearch(),因为字母表具有自然排序的良好特性 (0 < 1 < 2 < ... < z ).但是,可能应该添加一个测试,使其返回码不为负!

关于java - 如何将整数转换为 base64 (0-9A-Za-z),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22043451/

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