假设您有一个字节变量,并为其指定十进制值102。 (byte myByteVariable = 102;) 为什么会这样?难道你不应该提供一个实际的8位值来避免混淆吗?如何通过提供位来设置字节值?
答案 0 :(得分:2)
byte
是十进制类型,表示十进制数,它不代表位字段。因此102
是它的正常值,因为它在byte
值范围内([0; 255])。如果您想操作这些位,请考虑使用BitArray
或BitVector32
。
答案 1 :(得分:2)
如何通过提供位来设置字节值?
如果要显式设置字节值,则可以使用前缀0x
来指示您以十六进制表示,作为4位组的编码。例如。十进制102
的十六进制值为0x66
,相当于0110 0110
。
但是为了直接提供位,Marc Gravell提供了一个选项here,用于使用Convert类从二进制转换为int,类似地,您可以使用{{3将二进制值的字符串表示转换为字节as:
byte b = Convert.ToByte("01100110", 2);
答案 2 :(得分:1)
byte
可以存储8位(即0到255之间的值)。 short
存储16位,int
32等.C#中的每个整数类型只允许存储更广泛的数字。 C#允许您为这些类型中的任何一种分配整数。
要单独设置每个位,您需要使用bitwise operators。
我实际上前一段时间写了library来处理这个问题,允许你使用data[x]
设置字节的每一位。它与BitArray
类非常相似(我不确定我是否知道它何时制作)
它的主要思想是:
private byte data;
public void SetBit(int index, bool value)
{
if (value)
data = (byte)(data | (1 << index));
else
data = (byte)(data & ~(1 << index));
}
public bool GetBit(int index)
{
return ((data & (1 << index)) != 0);
}