1

我正在研究 C# 中的音频库,并且正在研究 WAVE 文件格式 ATM。根据我正在使用的信息量很大的网站,WAVE 使用 Pascal 风格的字符串。我已经在谷歌上搜索了 20 多分钟,并且只提出了一个C 到 Pascal 转换器

我知道 Pascal 和 C 字符串如何比较(C 代码):

char *cStr = "Test"; // C - produces {'T', 'e', 's', 't', '\0'}
char pascal[] = {4, 'T', 'e', 's', 't'}; // Pascal

如果有帮助,我正在使用它System.IO.BinaryReader来解析文件。

4

2 回答 2

3

好吧,如果您使用BinaryReader它应该很容易。

var size = rd.ReadByte();
var body = rd.ReadBytes(size);
var text = System.Text.Encoding.ASCII.GetString(body);
于 2012-06-07T05:01:07.293 回答
1

Pascal 字符串背后的基本思想是第一个字节保存字符串长度,后续字节保存字符串数据(将字符串限制为 255 个字符)。

我将使用字节数组并使用 C# 中的字符串到字节转换方法来填充它。请参阅下面问题的已接受答案,以了解如何将 C# 字符串转换为字节数组,并记住将所有内容偏移 1 个数组位置,以便为第 0 个字节留出空间,保持字符串长度,并记住用第 0 个字节填充实际的字符串长度。检查您的输入字符串长度以确保它不超过 255 个字符 :-)

如何在不手动指定编码的情况下获得 C# 中字符串的一致字节表示?

于 2012-06-07T04:52:16.193 回答