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

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

> b是有效的C字符串(即它具有b.length = str.length()1并且b [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字符串转换为表示C字符串的以空字符结尾的byte []? (ASCII) - 代码日志