【问题标题】:Convert a Java string into 16-byte byte array将 Java 字符串转换为 16 字节字节数组
【发布时间】:2015-06-27 18:45:43
【问题描述】:

我的存储空间有限,只能在字节数组中存储 16 个字节。如果我有一个长字符串,String.getBytes() 将不适合我。

如何将 7 位标准 ascii 字符集的长 java 字符串转换/编码为 16 字节字节数组,可以编码回原始字符串?不过,我知道原始输入字符串会有限制。我也在寻找建议如何设置具有合理长度限制的要求,即电子邮件地址长度。

【问题讨论】:

  • 字符串是否具有任意值,或者它只能具有有限数量的值?这些字符串中有多少个?存储是否仅限于 RAM,或者是否可以将字符串存储在取消 16 字节限制的地方?
  • 限制实际上是由外部库设置的,该库限制将字节数组放入 16 个固定数组大小。我的输入字符串实际上是 7 位 ascii 可打印字符集中的电子邮件地址。我不能将电子邮件地址限制为少于 16 个字符,但我想知道一种合理的方法来扩展合理的电子邮件长度。
  • 如果是电子邮件地址,可以轻松创建自定义编码,将所有小写字母和大多数标点符号映射为 5 位字符,然后对其进行扩展以添加对数字的支持。这样,您最多可以在 16 个字节中容纳 25 个字符。不确定它对你来说是否足够。对我来说,不是。您还可以使用上下文霍夫曼编码对编码地址进行一些实验。我怀疑结果会不会很好。

标签: java character-encoding


【解决方案1】:

你问的是不可能的。一个任意的、足够长和复杂的字符串不能用 16 个字节编码。

即使字符串仅使用 7 位标准 ASCII 字符,您也将被限制为使用 18 个字符((每字节 8 位 * 16 字节)/每字符 7 位)编码/解码字符串。在这种情况下,实际的位移算法会非常混乱,所节省的内存可以忽略不计。

【讨论】:

  • 我的问题一开始就不好。显然,如果不对输入字符串进行合理限制,这在技术上是不可能的。让我重新提出我的问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 2013-12-19
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
相关资源
最近更新 更多