【发布时间】:2018-12-21 16:26:26
【问题描述】:
录制的音频字节数与 HTTP 请求正文一起发送。当服务器端收到请求时,音频数据如下所示:
\u0000\u0000\u0000\u0000\u0000\u0000��\u0002\u0000������4\u0000M\u0000@\u0000%\u0000\u0014\u0000����������\u0015\u0000M\u0000r\u0000�\u0000_\u0000C\u0000^\u0000V\u0000\u0007\u0000��\"\u0000;\u0000>\u0000\u0005\u0000����������������\f\u0000+\u0000K\u0000e\u0000.\u0000������������\u0003\u0000\b\u0000����������\"\u0000G\u0000V\u0000(\u0000 \u0000\u0004\u0000����������\u0003\u0000W\u0000�\u0000Z\u0000a\u0000{\u0000,\u0000��������\u001E\u0000��������1\u0000\u001A\u0000\u0011\u0000(\u0000/\u0000\u0016\u0000��������0\u0000/\u00002\u0000;\u0000������d�������\u001F\u00009\u00006\u0000j\u0000[\u0000'\u0000������������\u000E\u00009\u0000%\u0000����\u0015\u0000(\u00003\u0000+\u0000'\u0000������<\u0000F\u0000=\u0000h\u0000�\u0000M\u0000��������������T\u0000i\u0000]
如何将此字符串转换回原始音频数据字节?
我尝试调用 getBytes(),但似乎不正确。
----- 编辑-----
发布 HTTP 请求的代码会太长。我将在这里引用一个简短的示例。
public static void main(String args[]) throws Exception
{
byte[] test = new byte[]{(byte)0xfc, (byte)0xff, (byte)0xff, (byte)0xff};
String testString = new String(test);
System.out.println(testString);
System.out.println(getHexString(testString.getBytes()));
}
public static String getHexString(byte[] bytes)
{
char[] hexArray = "0123456789ABCDEF".toCharArray();
char[] hexChars = new char[bytes.length * 2];
for ( int j = 0; j < bytes.length; j++ )
{
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
上面的代码给出了以下结果
����
EFBFBDEFBFBDEFBFBDEFBFBD
当我将字节 FC、FF、FF、FF 转换为字符串时,我得到 ����。当我将字符串转换回字节时,我得到 EF BF BD EF BF BD EF BF BD EF BF BD。我想从����获取原始字节 FC、FF、FF、FF。
【问题讨论】:
-
这很大程度上取决于编码、文件格式等细节,最重要的是:您的 http 请求是如何构建的。请提供minimal reproducible example,现在你的问题是“你好医生,我的猫发出奇怪的声音。现在告诉我她怎么了”。
-
如果您可以发布用于在客户端生成 HTTP 请求的代码,也许有人可以提供帮助。
-
@GhostCat 嗨,我刚刚编辑了我的问题。
-
@user31601 嗨,我刚刚编辑了我的问题
-
byte 是 signed 类型。 0xFF 不是有效字节!