将Int类型转换为Type Byte

时间:2014-01-28 22:32:35

标签: c# types type-conversion

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

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

我希望输出为:

  • 0x80的
  • 0x40的
  • 0x20的
  • 0x10的
  • 0x08的
  • 0×04
  • 0×02
  • 0×01

当我运行我的代码时,我遇到一个异常“其他不可解析的字符位于字符串的末尾。”有没有更好的方法来捕获这些字节?

谢谢

3 个答案:

答案 0 :(得分:2)

您收到错误是因为您错误地指定该字符串位于基数8中。数字&#39; 8&#39;不是基数为8的合法数字,仅使用0到7。

为什么不

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

  

感谢抓住那个...我真正想写的是将int 0x10000000中的一点从索引0转移到7然后每次将其转换为一个字节为一个数组[0x80,0x40,0x20,0x10,0x08 ,0x04,0x02,0x01]。这可能吗?

我不明白int 0x10000000与它有什么关系。如果你想要那个数组,你可以通过多种方式实现这一目标:

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);

答案 1 :(得分:2)

你在找这个吗?

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

请参阅Standard Numeric Format Strings

答案 2 :(得分:2)

为什么不这样做?

for ( int i = 0 ; i < 8 ; ++i )
{
  int  s = 0x80 >> i ;
  byte b = (byte) s ;
)

或(清洁):

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

byte转换为十六进制字符串,例如

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

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