[英]Why shifting an int before writing to a file?
我正在反转文件编写器的源代码,以下是读取/写入整数(或更确切地说是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)始终相同并且发生偏移?
附言:我需要这篇文章,并且会给你功劳。 如果愿意,可以在这里检查,也可以在codeproject上检查: Sequential-byte-serializer
感谢您的关注。 积分已计入@Sentry和@Rotem。 文章获得批准后,我还将发布codeproject网址
该代码将一个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的高低部分
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.