在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#中将字符串转换为字节数组的主要内容,如果未能解决你的问题,请参考以下文章