java - 有效地将 Java 字符串转换为表示 C 字符串的以 null 结尾的 byte[]? (ASCII)

标签 java string

我想将 Java String str 转换为具有以下特征的 byte[] b:

  • b 是一个有效的 C 字符串(ie 它有 b.length = str.length() + 1b [str.length()] == 0.
  • b中的字符是将str中的字符转换为8位ASCII字符得到的。

最有效的方法是什么——最好是现有的库函数?遗憾的是,str.getBytes("ISO-8859-1") 不符合我的第一个要求...

最佳答案

// do this once to setup
CharsetEncoder enc = Charset.forName("ISO-8859-1").newEncoder();

// for each string
int len = str.length();
byte b[] = new byte[len + 1];
ByteBuffer bbuf = ByteBuffer.wrap(b);
enc.encode(CharBuffer.wrap(str), bbuf, true);
// you might want to ensure that bbuf.position() == len
b[len] = 0;

这需要分配几个包装器对象,但不会复制字符串字符两次。

关于java - 有效地将 Java 字符串转换为表示 C 字符串的以 null 结尾的 byte[]? (ASCII),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17737206/

相关文章:

java - JVM 未退出

ios - 在搜索栏中搜索空字符串 : Objective-c

java - 我可以在 Eclipse 中为 JAVA 创建自定义内容辅助吗?

java - 无控制结构的校验值

java - 如何使一个组可选,它捕获模式并捕获相同的组号?

java - 如何在注入(inject)过程中包含命令行参数?

c++ - 字符串没有针对字符串文字进行足够优化

string - 拆分函数 Kotlin 如何使用多个拆分参数

javascript - 使用 jQuery 在网页上突出显示字符串的字符

java - 必须输入两次才能扫描仪读取