【发布时间】:2012-03-16 09:07:39
【问题描述】:
老实说,我对用 C# 读取二进制文件感到非常困惑。 我有用于读取二进制文件的 C++ 代码:
FILE *pFile = fopen(filename, "rb");
uint n = 1024;
uint readC = 0;
do {
short* pChunk = new short[n];
readC = fread(pChunk, sizeof (short), n, pFile);
} while (readC > 0);
它会读取以下数据:
-156, -154, -116, -69, -42, -36, -42, -41, -89, -178, -243, -276, -306,...
我尝试将此代码转换为 C#,但无法读取此类数据。这是代码:
using (var reader = new BinaryReader(File.Open(filename, FileMode.Open)))
{
sbyte[] buffer = new sbyte[1024];
for (int i = 0; i < 1024; i++)
{
buffer[i] = reader.ReadSByte();
}
}
我得到以下数据:
100, -1, 102, -1, -116, -1, -69, -1, -42, -1, -36
我怎样才能得到相似的数据?
【问题讨论】:
-
在 C++ 中,您将每个实体读取为
short,即 2 个字节,而在 C# 中,您将每个实体读取为sbyte,即 1 个字节。跨度> -
@Jason 在 C++ 中肯定没有完全定义
short的大小;p 但是:我不反对。您应该将其添加为答案。 -
我不知道,没有 C++ 经验;/
-
在 C++ 示例中,您读取的是短数据类型,而在 C# 示例中,您使用的是有符号字节,数据范围要小得多。您是否尝试在 C# 示例中将 sbyte 更改为 short ?
-
确实,-178、-243、-306 等完全在
sbyte范围之外 - 所以这永远不会像sbyte那样工作