我的应用程序从硬件设备获取数据,该设备表示为字符串EG XYZ * 012。我把字符串分开,所以我得到“012”,我需要将其转换为字节数组。
我遇到的问题是我希望每个数字保持其值,因此字符“0”将存储在一个字节中为0,字符“1”将存储在字节中为1等。 这是必需的,因为我需要处理字节的位。我尝试过使用“GetBytes”命令,但它将“0”转换为48,这不是我想要的。
是否有命令可以执行我想要的操作或者我需要在循环中单独手动处理字符串中的每个字符?
答案 0 :(得分:3)
以下将文本字符数标准化为其等效的字节数:
byte[] bytes = data.Select(c => (byte)(c - '0')).ToArray();
答案 1 :(得分:1)
string numString = "012";
var numChars = numString.ToCharArray();
var result = new byte[numChars.Length];
for (int i = 0; i < numChars.Length; i++)
{
result[i] = System.Convert.ToByte(numChars[i]);
}
答案 2 :(得分:1)
是的,使用循环。您想要一个非标准的特定转换:
string numString = "012";
var byteDigits = new byte[numString.Length];
for(int i = 0; i < byteDigits.Length; i++)
byteDigits[i] = (byte)(numString[i] - '0')
答案 3 :(得分:1)
string s = "012";
byte[] bytes = s.Select(c => byte.Parse(c.ToString())).ToArray();
答案 4 :(得分:0)
我不确定我是否理解你想要实现的目标,这是
List<byte> lstint = byval.Select(c => Convert.ToByte(c.ToString())).ToList();
对于字节数组
byte[] bytarr = byval.Select(c => Convert.ToByte(c.ToString())).ToArray();
答案 5 :(得分:0)
使用System.Linq可以执行此操作。这也将跳过非数字。
var sourceString="012";
var result = sourceString.Where(c=>c>='0' && c<='9').Select(c=>(byte)(c-'0')).ToArray();
或者如果您想要无效字符只能为255,则可以
var result = sourceString.Select(c=> (c>='0' && c<='9') ? (byte)(c-'0') : 255).ToArray();