我正在反转文件编写器的源代码,以下是读取/写入整数(或更确切地说是ushorts)的方法:
BinaryReader _Reader;
BinaryWriter _Writer;
void RawWriteInt16(int value)
{
byte a = (byte)(value & 255);
byte b = (byte)(value >> 8 & 255);
_Writer.Write(a);
_Writer.Write(b);
}
ushort RawReadUInt16()
{
int num = _Reader.ReadByte();
int num2 = _Reader.ReadByte();
return (ushort)((num2 << 8) + num);
}
那么,您能解释为什么&与255(11111111)总是相同并且发生偏移吗?
P.S。我需要这篇文章,并且会给你信誉。您可以根据需要在此处进行检查,也可以在codeproject上进行检查:Sequential-byte-serializer
感谢您的关注。积分已计入@Sentry和@Rotem。文章获得批准后,我还将发布codeproject网址
答案 0 :(得分:7)
该代码将一个16位整数值转换为两个(8位)字节值:
## byte a = (byte)(value & 255); ##
(int)value: 1101 0010 0011 1000
(int) 255: 0000 0000 1111 1111
bitwise &: 0000 0000 0011 1000
to byte: 0011 1000
然后
## byte b = (byte)(value >> 8 & 255); ##
(int)value: 1101 0010 0011 1000
>> 8: 0000 0000 1101 0010
(int) 255: 0000 0000 1111 1111
bitwise &: 0000 0000 1101 0010
to byte: 1101 0010
因此,您有两个字节分别代表16位int的高低部分