【问题标题】:Convert a string into a byte array in c#在c#中将字符串转换为字节数组
【发布时间】:2018-01-26 20:49:51
【问题描述】:

我有一个字符串,

string Var="11001100" 

我想把它转成字节数组。

bArray[0]=0x00;
bArray[1]=0x00;
bArray[2]=0x01;
bArray[3]=0x01;
bArray[4]=0x00;
bArray[5]=0x00;
bArray[6]=0x01;
bArray[7]=0x01;

有人可以指导我吗?我尝试了以下代码,但我得到了 ASCII 格式的数据。我不想那样。

bArray = Encoding.Default.GetBytes(var);

【问题讨论】:

  • 你的意思是 bit 数组吗?
  • 我只想要字节数组。我试过了 Encoding.ASCII.GetBytes(var);我不想要 acii 中的数据,即 48 表示 0 等等。我想保留二进制字符串。
  • 或者你可以做ascii算术并减去'0'的ascii值,即48
  • 这个输入的结果是什么:string Var="10101100";?

标签: c# arrays type-conversion


【解决方案1】:

我建议使用 Linq

using System.Linq;

...

string Var = "11001100";

byte[] bArray = Var
  .Select(item => (byte) (item == '0' ? 1 : 0))
  .ToArray(); 

测试:

Console.WriteLine(string.Join(Environment.NewLine, bArray
  .Select((value, index) => $"bArray[{index}]=0x{value:X2};")));

结果:

bArray[0]=0x00;
bArray[1]=0x00;
bArray[2]=0x01;
bArray[3]=0x01;
bArray[4]=0x00;
bArray[5]=0x00;
bArray[6]=0x01;
bArray[7]=0x01;

【讨论】:

    【解决方案2】:

    但我以 ASCII 格式获取数据。我不想那样。

    然后你需要字符的字符串表示。您可以使用ToString 方法获得它。这将是简单地使用反向 for 循环的老式方法:

    string Var="11001100";
    
    byte [] bArray = new byte[Var.Length];
    
    int countForward = 0;
    for (int i = Var.Length-1; i >= 0 ; i--)
    {
        bArray[countForward] = Convert.ToByte(Var[i].ToString());
        countForward++;
    }
    

    【讨论】:

    • 请注意,bArray 应该包含 inversed 值:'1' -> 0'0' -> 1
    • @DmitryBychenko 我感觉 OP 正在从右到左读取输入(小端时尚)。因此我选择了反向 for 循环
    • 我明白了;我们需要一个更好的测试示例来区分这两种可能性...
    • @DmitryBychenko 让我们看看他是否从评论中回答了我的问题
    • 好吧,如果是"11010101",结果是不同[0, 0, 1, 0, 1, 0, 1, 0](我的理解 - 字节反转)和[0, 1, 0, 1, 0, 1, 0, 0](你的阅读 - 很少/大端)。 "11001100"提供的测试用例忍不住选对了(唉!)
    【解决方案3】:

    这是我对您问题的解决方案:

    string value = "11001100";
    int numberOfBits = value.Length;
    var valueAsByteArray = new byte[numberOfBits];
    
    for (int i = 0; i < numberOfBits; i++)
    {
        bytes[i] = ((byte)(value[i] - 0x30)) == 0 ? (byte)1 : (byte)0;
    }
    

    编辑:忘记反转。

    【讨论】:

      猜你喜欢
      • 2017-12-11
      • 2018-03-20
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 2021-11-11
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多