【问题标题】:Converting Type Int to Type Byte将 Int 类型转换为 Byte 类型
【发布时间】:2014-02-20 12:04:46
【问题描述】:

我有一小组代码尝试将 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
  • 0x04
  • 0x02
  • 0x01

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

谢谢

【问题讨论】:

  • 你为什么不直接转换为字节或者我错过了什么?

标签: c# types type-conversion


【解决方案1】:

你为什么不这样做?

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 是一个数字,它没有格式(表示),直到你把它变成一个字符串给它一个。

【讨论】:

  • 感谢您的反馈。我想我真正想做的是将 1 移动如下:10000000(或 0x80)、01000000(或 0x40).... 0x00000001(或 0x01)。一旦每个位被移动,我想以十六进制格式“0x--”捕获它。
【解决方案2】:

你在找这个吗?

for (int t = 0; t < 8; t++)
{
   int ShiftBit = 0x80 >> t;
   byte ShiftBitByte = (byte) ShiftBit;

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

Standard Numeric Format Strings

【讨论】:

    【解决方案3】:

    您收到错误是因为您错误地指定字符串以 8 为基数。数字“8”不是以 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);
    

    【讨论】:

    • 感谢您发现...我真正要写的是将 int 0x10000000 从索引 0 移到 7 位,然后每次将其转换为数组 [0x80, 0x40, 0x20、0x10、0x08、0x04、0x02、0x01]。这可能吗?
    • @Nevets 我已经更新了我的答案来解决你的问题。
    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2012-01-10
    • 2014-09-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    相关资源
    最近更新 更多