在c#中将字符串转换为字节数组

Posted

技术标签:

【中文标题】在c#中将字符串转换为字节数组【英文标题】:Convert a string into a byte array in 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);

【问题讨论】:

Converting string to byte array in C#的可能重复 你的意思是 bit 数组吗? 我只想要字节数组。我试过了 Encoding.ASCII.GetBytes(var);我不想要 acii 中的数据,即 48 表示 0 等等。我想保留二进制字符串。 或者你可以做ascii算术并减去'0'的ascii值,即48 这个输入的结果是什么:string Var="10101100";? 【参考方案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]=0xvalue: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;

编辑:忘记反转。

【讨论】:

以上是关于在c#中将字符串转换为字节数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将字符串转换为字节 []

如何在C#中将字节转换为字符串[重复]

在java中将字符串数组元素转换为字节数组[重复]

如何在 C# 中将固定字节/字符 [100] 转换为托管字符 []?

如何在c ++中将数组字节转换为字符串?

如何在 c# 中将字符串从 utf8 转换(音译)为 ASCII(单字节)?