如何解决如何使用BinaryReader.ReadBytesInt32
我有一个二进制数据文件,它还包含一些负值和正值,并以2的补码形式存储。
每当我尝试使用BinaryReader
类读取这些数据时,我总是得到正数。
private double nextByte(BinaryReader reader)
{
byte[] bValue = reader.ReadBytes(2);
StringBuilder hex = new StringBuilder(bValue.Length * 2);
foreach (byte b in bValue)
hex.AppendFormat("{0:x2}",b);
int decValue = int.Parse(hex.ToString(),System.Globalization.NumberStyles.HexNumber);
return Convert.ToDouble(decValue);
}
例如:
让我们考虑数据文件包含1011100101011110
。等效的十进制值为47454,带符号2的补码的十进制值为-18082。BinaryReader.ReadBytes(2)
方法将始终返回+ ve值,但我除外-18082值。
问题在于数据文件同时包含+ ve和-ve值,所以我如何实现这一目标,请任何人都可以帮助我。
解决方法
如果您想继续疯狂的转换,只需将结果int
转换为short
:
int decValue = 47454;
// int.Parse(hex.ToString(),System.Globalization.NumberStyles.HexNumber);
return (short)decValue;
强制转换为short
只会修剪int
的2个高字节,从而表示负值,然后将得到的short
值-18082
自动转换为{ {1}}以匹配返回类型。
请注意,您可能想要用ReadInt16直接阅读-18082.0f
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。