关于c#:将Type Int转换为Type Byte

Converting Type Int to Type Byte

我有一小部分代码试图将一个字节中的1位从0索引移动到7索引。每次移位后,我想取int值并将其转换为字节:

1
2
3
4
5
for(int t=0; t<8; t++)
{
    int ShiftBit = 0x80 >> t;
    byte ShiftBitByte = Convert.ToByte(ShiftBit.ToString(),8);
}

我希望产出是:

  • 0x80
  • 0x40
  • 0x20
  • 0x10
  • 0x08
  • 0x04
  • 0x02
  • 0x01

当我运行代码时,我遇到一个异常:"额外的不可分析字符在字符串的末尾。"是否有更好的方法来捕获这些字节?

谢谢你


你为什么不这么做?

1
2
3
4
5
for ( int i = 0 ; i < 8 ; ++i )
{
  int  s = 0x80 >> i ;
  byte b = (byte) s ;
)

或(清洁工):

1
2
3
4
for ( int i = 0x00000080 ; i != 0 ; i >>1 )
{
  byte b = (byte) i ;
}

把一个byte变成一个十六进制字符串,比如

1
2
byte b = ...
string s = string.Format("0x{0:X2}",b) ;

你应该这么做。但是一个byte是一个数字,它没有一个格式(表示),直到你把它变成一个字符串a给它一个。


你在找这个吗?

1
2
3
4
5
6
7
for (int t = 0; t < 8; t++)
{
   int ShiftBit = 0x80 >> t;
   byte ShiftBitByte = (byte) ShiftBit;

   Console.WriteLine("0x{0:X}",ShiftBitByte);
}

enter image description here

参见标准数字格式字符串


您得到错误是因为您错误地指定了字符串在基8中。数字"8"不是以8为基数的合法数字,它只使用0到7。

为什么不呢?

1
for (byte b = 0x80; b != 0; b >>= 1)

Thanks for catching that ... what I really meant to write was shift a bit in int 0x10000000 from index 0 to 7 and then convert it to a byte each time for an array [0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]. Is that possible?

我不明白Int 0x10000000与它有什么关系。如果需要该数组,可以通过以下几种方式实现:

1
2
3
4
5
6
7
byte[] xs = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };

byte[] ys = Enumerable.Range(0, 8).Select(i => (byte)(0x80 >> i)).ToArray();

byte[] zs = new byte[8];
for (int index = 0; index < zs.Length; index++)
    zs[index] = (byte)(0x80 >> index);