2013-02-05 242 views
0

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

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. 
+0

转换为Base64并从Base64转换,如下面的帖子所示。 http://stackoverflow.com/a/7360440/753632 – AndroidDev

+0

是的,为什么不使用Base64?它更安全,因为有些字节可能无法使用String正确表示。使用Base64进行编码/解码是最佳做法 - 我想 - – Yazan

回答

1

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

+0

我应该使用哪些字符集?一些生成固定的2个字节,一些可变宽度和一些只有一个字节。我希望它是一个字节。 ASCII? – AndroidDev

+1

我认为你可以使用ASCII。 – muhoweb

+0

我编辑了我的评论以上显示我尝试过的一些代码。它不起作用。数组之前和之后的值是不同的。 – AndroidDev

0

尝试使用US-ASCIIISO-8859-1代替ASCII的代码示例。 ASCII不是Java或Android的内置字符编码,但其中之一是。它们保证了单字节编码,并且警告不要在字符集中的字符将被自动截断。

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()这将返回一个字节数组。

在传递一个空字符串的情况下,你需要处理,通过两种抛出NullPointerException异常或处理它的方法本身内。

相关问题