gpt4 book ai didi

c# - 为什么在写入文件之前移动一个 int?

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:47 25 4
gpt4 key购买 nike

我正在逆向文件编写器的源代码,这里是读/写整数(或者更确切地说是 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) 中的 & 总是相同的并且会发生偏移吗?

附言我需要这个来写一篇文章,并且会给你信用。如果你愿意,你可以在这里查看,或者在代码项目上查看:Sequential-byte-serializer

感谢您的关注。学分已给予@Sentry 和@Rotem。当文章获得批准时,我还会发布代码项目 url

最佳答案

该代码将 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 的高位部分和低位部分

关于c# - 为什么在写入文件之前移动一个 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51010816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com