Преобразование строки чисел в байтовый массив с сохранением их отображаемого значения. - PullRequest
0 голосов
/ 29 июля 2011

Мое приложение получает данные от аппаратного устройства, которое представлено в виде строки, EG XYZ * 012.Я разделил строку так, чтобы получить «012», который мне нужно преобразовать в массив байтов.

Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы каждая цифра сохраняла свое значение, чтобы символ «0» сохранялся в байте как 0, а символ «1» - в байте как 1 и т.требуется, потому что мне нужно работать с битами байтов.Я пытался использовать команду «GetBytes», но она конвертирует «0» в 48, что не то, что я хочу.

Есть ли команда, которая делает то, что я хочу, или мне нужно вручную обрабатывать каждый символ в строке отдельно в цикле?

Ответы [ 6 ]

3 голосов
/ 29 июля 2011

Следующие значения нормализуют номера текстовых символов к их эквивалентам в байтах:

byte[] bytes = data.Select(c => (byte)(c - '0')).ToArray();
1 голос
/ 29 июля 2011
string s = "012";
byte[] bytes = s.Select(c => byte.Parse(c.ToString())).ToArray();
1 голос
/ 29 июля 2011

Да, используйте цикл.Вы хотите конкретное преобразование, которое не является стандартным:

string numString = "012";

var byteDigits = new byte[numString.Length];
for(int i = 0; i < byteDigits.Length; i++)
    byteDigits[i] = (byte)(numString[i] - '0')
1 голос
/ 29 июля 2011
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]);
}
0 голосов
/ 29 июля 2011

используя 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();
0 голосов
/ 29 июля 2011

Я не уверен, что я понимаю, что вы хотите достичь, это

List<byte> lstint = byval.Select(c => Convert.ToByte(c.ToString())).ToList();

Для байтового массива

byte[] bytarr = byval.Select(c => Convert.ToByte(c.ToString())).ToArray();
...