不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
C#使用BinaryWriter.Write存取数字示例
编辑:dnawo 日期:2011-12-23
下边代码用4个字节在文件中保存了一个数字(0xAABBCC):
按正常理解,文件内容应是这样:
所以,当按字节读取并进行转化时应是这样:
显示结果为:0xCCBBAA00,和原先的0xAABBCC不一样,为什么呢?用UltraEdit打开1.txt,可以看到实际保存为:
所以正确读取转化方法应为:
测试下:
这回正常了。
为什么文件中保存的是CC BB AA 00,而不是00 AA BB CC呢?
用Reflector查看BinaryWriter.Write(int value)方法,代码如下:
例如上边例子,经方法拆分后,this._buffer[0]=0xCC、this._buffer[1]=0xBB、this._buffer[2]=0xAA、this._buffer[3]=0,所以才会出现我们上边看到的结果。
为什么不写成:
这样就很好理解了,不解,郁闷。。。
后记
使用C++、Java做一样的测试,C++结果同上,只有Java的结果是00 AA BB CC!
复制内容到剪贴板 程序代码
using (FileStream fStream = File.Create(@"F:\1.txt"))
{
using (BinaryWriter bWriter = new BinaryWriter(fStream))
{
bWriter.Write((int)0xAABBCC);
}
}
{
using (BinaryWriter bWriter = new BinaryWriter(fStream))
{
bWriter.Write((int)0xAABBCC);
}
}
按正常理解,文件内容应是这样:
引用内容
00 AA BB CC
所以,当按字节读取并进行转化时应是这样:
复制内容到剪贴板 程序代码
using (FileStream fStream = File.Open(@"F:\1.txt", FileMode.Open))
{
byte[] bytes = new byte[4];
if (fStream.Read(bytes, 0, 4) == 4)
{
int number = (bytes[0] << 24) + (bytes[1] << 16) + (bytes[2] << 8) + bytes[3];
Console.WriteLine("0x" + number.ToString("X"));
}
}
{
byte[] bytes = new byte[4];
if (fStream.Read(bytes, 0, 4) == 4)
{
int number = (bytes[0] << 24) + (bytes[1] << 16) + (bytes[2] << 8) + bytes[3];
Console.WriteLine("0x" + number.ToString("X"));
}
}
显示结果为:0xCCBBAA00,和原先的0xAABBCC不一样,为什么呢?用UltraEdit打开1.txt,可以看到实际保存为:
所以正确读取转化方法应为:
复制内容到剪贴板 程序代码
using (FileStream fStream = File.Open(@"F:\1.txt", FileMode.Open))
{
byte[] bytes = new byte[4];
if (fStream.Read(bytes, 0, 4) == 4)
{
int number = (bytes[3] << 24) + (bytes[2] << 16) + (bytes[1] << 8) + bytes[0];
Console.WriteLine("0x" + number.ToString("X"));
}
}
{
byte[] bytes = new byte[4];
if (fStream.Read(bytes, 0, 4) == 4)
{
int number = (bytes[3] << 24) + (bytes[2] << 16) + (bytes[1] << 8) + bytes[0];
Console.WriteLine("0x" + number.ToString("X"));
}
}
测试下:
这回正常了。
为什么文件中保存的是CC BB AA 00,而不是00 AA BB CC呢?
用Reflector查看BinaryWriter.Write(int value)方法,代码如下:
复制内容到剪贴板 程序代码
public virtual void Write(int value)
{
this._buffer[0] = (byte) value;
this._buffer[1] = (byte) (value >> 8);
this._buffer[2] = (byte) (value >> 0x10);
this._buffer[3] = (byte) (value >> 0x18);
this.OutStream.Write(this._buffer, 0, 4);
}
{
this._buffer[0] = (byte) value;
this._buffer[1] = (byte) (value >> 8);
this._buffer[2] = (byte) (value >> 0x10);
this._buffer[3] = (byte) (value >> 0x18);
this.OutStream.Write(this._buffer, 0, 4);
}
例如上边例子,经方法拆分后,this._buffer[0]=0xCC、this._buffer[1]=0xBB、this._buffer[2]=0xAA、this._buffer[3]=0,所以才会出现我们上边看到的结果。
为什么不写成:
复制内容到剪贴板 程序代码
public virtual void Write(int value)
{
this._buffer[0] = (byte)(value >> 0x18);
this._buffer[1] = (byte)(value >> 0x10);
this._buffer[2] = (byte)(value >> 8);
this._buffer[3] = (byte)value;
this.OutStream.Write(this._buffer, 0, 4);
}
{
this._buffer[0] = (byte)(value >> 0x18);
this._buffer[1] = (byte)(value >> 0x10);
this._buffer[2] = (byte)(value >> 8);
this._buffer[3] = (byte)value;
this.OutStream.Write(this._buffer, 0, 4);
}
这样就很好理解了,不解,郁闷。。。
后记
使用C++、Java做一样的测试,C++结果同上,只有Java的结果是00 AA BB CC!
上一篇: 浅谈HASH算法与CSDN密码泄漏事件
下一篇: T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
下一篇: T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 8373
发表评论
请登录后再发表评论!