【发布时间】:2012-11-10 04:49:29
【问题描述】:
我正在从事 Java 多媒体 IO 项目并且遇到了一个问题,当我尝试编写一个 DWORD 时,它的长度是 16 个字节而不是 4 个字节。我正在使用以下代码将 4 char 字符串转换为 16 位 little endian 字节数组;
word.getBytes("UTF-32LE")
如果有人可以请告诉我为什么数组长到 4 个字节。
谢谢, 利亚姆。
【问题讨论】:
我正在从事 Java 多媒体 IO 项目并且遇到了一个问题,当我尝试编写一个 DWORD 时,它的长度是 16 个字节而不是 4 个字节。我正在使用以下代码将 4 char 字符串转换为 16 位 little endian 字节数组;
word.getBytes("UTF-32LE")
如果有人可以请告诉我为什么数组长到 4 个字节。
谢谢, 利亚姆。
【问题讨论】:
因为您正在编码为每个字符占用 4 个字节的格式 (UTF-32) See description here
如果您希望它是每个字符一个字节,请使用“UTF-8”而不是“UTF-32LE”
【讨论】:
好的,我做了一些调试,发现直接从 'word.getBytes("UTF-32LE")' 写入字节时,会添加额外的 12 个字节;
如果我要执行"RIFF".getBytes("UTF-32LE"),我会在文件中得到R000I000F000F000,所以我使用以下代码删除这些零,
byte[] bits = word.getBytes("UTF-32LE");
byte[] dword = new byte[4];
System.arraycopy(bits, 0, dword, 0, 1);
System.arraycopy(bits, 4, dword, 1, 1);
System.arraycopy(bits, 8, dword, 2, 1);
System.arraycopy(bits, 12, dword, 3, 1);
write(dword);
我不知道我遇到的问题是错误还是它导致返回的原因。
【讨论】: