为什么允许将十进制值提供给字节类型?

时间:2015-09-13 21:27:41

标签: c#

假设您有一个字节变量,并为其指定十进制值102。     (byte myByteVariable = 102;) 为什么会这样?难道你不应该提供一个实际的8位值来避免混淆吗?如何通过提供位来设置字节值?

3 个答案:

答案 0 :(得分:2)

byte是十进制类型,表示十进制数,它不代表位字段。因此102是它的正常值,因为它在byte值范围内([0; 255])。如果您想操作这些位,请考虑使用BitArrayBitVector32

答案 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);
}