将字节数组转换为具有等效字节数的字符串

时间:2013-02-05 14:39:40

标签: java android arrays string byte

是否可以将字节数组转换为字符串,但字符串的长度与数组中的字节数完全相同?如果我使用以下内容:

byte[] data; // Fill it with data
data.toString();

字符串的长度不同于数组的长度。我相信这是因为Java和/或Android会考虑某种默认编码。数组中的值也可以是负数。从理论上讲,应该可以将任何字节转换为某个字符。我想我需要弄清楚如何指定一个为每个字符生成固定单字节宽度的编码。

修改

我尝试了以下但是没有用:

byte[] textArray; // Fill this with some text.
String textString = new String(textArray, "ASCII"); 
textArray = textString.getBytes("ASCII"); // textArray ends up with different data.

3 个答案:

答案 0 :(得分:1)

您可以使用String构造函数String(byte[] data)从字节数组创建字符串。如果还要指定charset,可以使用String(byte[] data, Charset charset)构造函数。

答案 1 :(得分:0)

尝试使用US-ASCIIISO-8859-1代替ASCII的代码示例。 ASCII不是Java或Android的内置字符编码,但其中一个是。它们保证是单字节编码,但需要注意的是字符集中没有的字符将被静默截断。

答案 2 :(得分:0)

这应该可以正常工作!

public static byte[] stringToByteArray(String pStringValue){
    int length= pStringValue.length();
    byte[] bytes = new byte[length];

    for(int index=0; index<length; index++){
        char ch= pStringValue.charAt(index);
        bytes[index]= (byte)ch;
    }

    return bytes;
}

自JDK 1.6以来:

您也可以使用:

stringValue.getBytes(),它将返回一个字节数组。

如果传递 NULL字符串,则需要通过抛出nullPointerException或在方法本身内处理来处理它。