字节数组字符串到字节数组? [复制]
Posted
技术标签:
【中文标题】字节数组字符串到字节数组? [复制]【英文标题】:ByteArray String to ByteArray? [duplicate] 【发布时间】:2015-03-19 23:02:39 【问题描述】:我有一个要转换为字节数组的字符串,但是,我的字符串是图像字节数组的实际表示(例如String x = "00123589504e47..."
)。所以,我被卡住了,因为 x.getBytes();
不能完成这项工作。我需要一种方法将字符串转换为字节数组,然后将该字节数组保存到特定目录中的图像中。我该如何施放它?
【问题讨论】:
我的字符串是字节数组的实际表示:这是什么意思?要精确。假设字节是 1、-6 和 124。对应的字符串是什么? 显示输入字符串和预期输出。 如果是base16编码的,看这个问题:***.com/questions/140131/… 这没有任何意义。字节是一个数字,其值可以从 -128 到 127。图像文件可以包含这些值中的任何一个。如何从图像的字节创建字符串? “字节表示”不明确。将字节数组表示为字符串的方法不止一种。请指定字符串的确切格式。 【参考方案1】:我总是用这一个班轮:
byte[] data = DatatypeConverter.parseHexBinary(x);
然后您可以为图像实例化 FileOutputStream 并将字节写入其中。
【讨论】:
【参考方案2】:做
x.getBytes();
并不能完成这项工作
是的,这很正常……
char
和byte
彼此没有关系;你不能无缝地从一个转换到另一个并期望获得一个理智的结果。阅读有关字符编码的信息。
根据您的需要,字符串实际上是图像的“十六进制转储”。因此,您需要通过两个字符读取两个字符并将其转换为字节数组。
怎么样?嗯,你有提示。首先,生成的字节数组的长度始终是字符串除以 2 的长度,因此您可以这样做:
// input is the string
final int arrayLen = input.length() / 2;
final byte[] result = new byte[arrayLen];
然后你需要遍历字符串的字符并将这两个字符解析为一个字节,并将其添加到数组中:
int strIndex;
char[] chars = new char[2];
for (int arrayIndex = 0; arrayIndex < arrayLen; arrayIndex++)
strIndex = 2 * arrayIndex;
chars[0] = input.charAt(strIndex);
chars[1] = input.charAt(strIndex + 1);
result[arrayIndex] = Byte.parseByte(new String(chars), 16);
// Done
return result;
【讨论】:
以上是关于字节数组字符串到字节数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
将 ansichar 数组复制到 char delphi 10.2 数组
Java基础知识十一:FileInputStream字节输入流读取文件复制读取字节数组复制图片案例,字节缓冲流介绍复制视频案例,字符串编码与解码