繁体   English   中英

为什么在写入文件之前先将int移位?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM