我有一个像这样初始化的字节数组:
public static byte[] tmpIV = {0x43, (byte)0x6d, 0x22, (byte)0x9a, 0x22,
(byte)0xf8, (byte)0xcf, (byte)0xfe, 0x15, 0x21,
(byte)0x0b, 0x38, 0x01, (byte)0xa7, (byte)0xfc, 0x0e};
如果我打印它给我
67 109 34 -102 34 -8 -49 -2 21 33
11 56 1 -89 -4 14
然后我将整个字节数组转换为字符串并发送给我的朋友.
String str = new String(tmpIV);
我的朋友是C#程序员
所以我的朋友得到了一些其他数据.我的朋友将如何获得与我发送的数据相同的数据.
另外在Java中如果我将上面的字符串重新转换为字节数组,我没有得到我发送的确切字符串:
67 109 34 -17 -65 -67 34 -17 -65 -67
-17 -65 -67 -17 -65 -67 21 33 11 56 1
-17 -65 -67 -17 -65 -67
解决方法:
问题是您已将字节数组转换为平台默认编码中的字符串.
如果这是任意二进制数据(它似乎是),那么你不应该使用任何普通的字符编码将其转换为字符串 – 而是使用base64.
使用Java中的base64并不是特别容易(因为它不在标准库AFAIK中),但是您可以使用各种第三方库,例如the one in the Apache Commons Codec library.
在C#方面它会更容易 – 只需使用:
byte[] data = Convert.FromBase64String(text);
标签:java,c-2,byte
来源: https://codeday.me/bug/20190726/1547996.html