2016-02-25 21 views
0

我必须在Java中读取一个无符号的8位字节数组(值范围是0-255),并需要将其解码为字符串。解密无符号字节数组(这是短[])在Java中的字符串

但是在java中,由于字节是8位有符号值,因此java会将其视为short [](short值的数组)而不是byte []。我只能将对象投射到短[]。

我需要的是一种将此数组解码为字符串的方法。

在此先感谢!

+2

请给出一个输入的例子和d期望的输出。 –

+0

如果您不知道编码(或[Charset](http://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html),如您所知),您无法安全解码字节序列。假设一个字节等于一个字符是不正确的,并且会破坏一个字节范围以外的数千个字符。 – VGR

+0

不幸的是,我没有关于编码的信息。数据来自Tibco RV,其类型为U8ARRAY。 (TibrvMsg.U8ARRAY) – Sanjeev

回答

2

那么,你有没有试过显而易见的?

public static void main(String[] args) { 
    final short[] input = {72, 69, 76, 76, 79}; 

    for (final short character : input) { 
     System.out.println((char) character); 
    } 
} 
+0

有些人物是玩偶?和一些不可读的符号。只有75%的文字是可读的。有没有办法解决这个问题? 准确地说,数据来自Tibco Rv和数据类型U8ARRAY。 – Sanjeev

+0

一个字节≠一个字符。这样盲目地认为字节是像US-ASCII,ISO-8859-1或Windows-1252这样的单字节编码。 – VGR

+0

@Sanjeev你写道“我需要的是一种将此数组解码为字符串的方法。”并且这样做 - 如果您不知道字节是否代表有效字符,则必须查找或检查写入所用系统的人员,因为在查看字符时看不到此字符只要。 – Smutje

0
short[] x = {0x45,0x46,0x47}; 
    byte[] y = {0x45,0x46,0x47}; 
    System.out.println(new String(y)); 
    StringBuffer str = new StringBuffer(); 
    for(short s : x) 
     str.append((char)s); 
    System.out.println(str.toString()); 

输出

EFG 
EFG 
+0

你认为'new String(y)'会在Windows上,默认的Charset是UTF-16LE吗? – VGR

0

你可以一个无符号字节转换为字符是这样的:

byte unsignedByte = 65; 
    char character = (char) unsignedByte; 

所有你现在要做的就是在所有创建一个循环你的价值