gpt4 book ai didi

java - US-ASCII 字符串(解)压缩到/从字节数组(7 位/字符)

转载 作者:行者123 更新时间:2023-11-29 04:08:12 27 4
gpt4 key购买 nike

众所周知,ASCII使用7位来编码字符,所以用来表示文本的字节数总是小于文本字母的长度

例如:

    StringBuilder text = new StringBuilder();
IntStream.range(0, 160).forEach(x -> text.append("a")); // generate 160 text
int letters = text.length();
int bytes = text.toString().getBytes(StandardCharsets.US_ASCII).length;
System.out.println(letters); // expected 160, actual 160
System.out.println(bytes); // expected 140, actual 160

总是letters = bytes , 但预期是 letters > bytes .

主要问题:smpp协议(protocol) sms正文必须是 <= 140字节,如果我们使用 ascii编码,那么你可以写160字母 =(140*8/7) ,所以我想将文本编码为 7-bit based ascii , 我们正在使用 JSMPP图书馆

任何人都可以向我解释并指导我正确的方法,在此先感谢(:

最佳答案

(160*7-160*8)/8 = 20,因此您预计脚本末尾使用的字节数会减少 20 个。但是,寄存器有一个最小大小,所以即使你不使用所有位,你仍然不能将它连接到另一个值,所以你仍然使用 8 位字节作为你的 ASCII 码,这就是为什么你得到相同的号码。比如小写的“a”在ASCII中是97

‭01100001‬

注意前导零仍然存在,即使它没有被使用。您不能只使用它来存储另一个值的一部分。

结论是,在纯 ASCII 中,字母必须始终等于字节数。

(或者想象一下将 7 号物体放入 8 号盒子中。您不能将物体分成几 block ,因此盒子的数量必须等于物体的数量 - 至少在这种情况下是这样。)

关于java - US-ASCII 字符串(解)压缩到/从字节数组(7 位/字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56884877/

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