2013-05-14 6 views
1

У меня есть строка и вы хотите преобразовать ее в массив байтов шестнадцатеричного значения с помощью C#.
, например, «Hello World!» в байт [] = Val новый байт [] {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21} ;,Как преобразовать строку в массив байтов

Я вижу следующий код в Converting string value to hex decimal

string input = "Hello World!"; 
char[] values = input.ToCharArray(); 
foreach (char letter in values) 
{ 
    // Get the integral value of the character. 
    int value = Convert.ToInt32(letter); 
    // Convert the decimal value to a hexadecimal value in string form. 
    string hexOutput = String.Format("0x{0:X}", value);     
    Console.WriteLine("Hexadecimal value of {0} is {1}", letter, hexOutput); 
} 

Я хочу, чтобы это значение в массив байт, но не могу писать, как этот

byte[] yy = new byte[values.Length]; 
yy[i] = Convert.ToByte(Convert.ToInt32(hexOutput)); 

я пытаюсь этот код ссылается из How to convert a String to a Hex Byte Array?, где я проходил шестнадцатеричное значение 48656C6C6F20576F726C6421, но я получил десятичное значение не гекс.

public byte[] ToByteArray(String HexString) 
{ 
    int NumberChars = HexString.Length; 
    byte[] bytes = new byte[NumberChars/2]; 
    for (int i = 0; i < NumberChars; i += 2) 
    { 
     bytes[i/2] = Convert.ToByte(HexString.Substring(i, 2), 16); 
    } 
    return bytes; 
} 

и я также попробовать код с How can I convert a hex string to a byte array?

Но когда я использовал Convert.ToByte или byte.Parse, изменение значения до десятичного значения. Как мне это сделать?

Заранее спасибо

Я хочу отправить 0x80 (т.е., 128) к последовательному порту, но когда я скопировать и вставить эквивалент символов в 128 к переменному «входу» и преобразовать байты, я получил 63 (0x3F). Поэтому я думаю, что мне нужно отправить шестнадцатеричный массив. Думаю, у меня есть неправильная идея. Pls видит снимок экрана.

enter image description here

Сейчас я решить эту проблему, чтобы объединить массивы байтов.

string input = "Hello World!"; 
byte[] header = new byte[] { 2, 48, 128 }; 
byte[] body = Encoding.ASCII.GetBytes(input); 
+0

Может быть, вы должны сначала понять [Binary системы счисления] (http://en.wikipedia.org/wiki/Binary_numeral_system) и как компьютер работает с данными и как двоичные данные представлен человеком (например, [ASCII] (http://en.wikipedia.org/wiki/ASCII)), прежде чем пытаться конвертировать между ними. –

ответ

3

Hexadecimal не имеет ничего общего с этим, ваш желаемый результат не больше и не меньше, чем массив байтов, содержащих коды ASCII.

Попробуйте Encoding.ASCII.GetBytes(s)

0

Там что-то странное с вашим требованием:

У меня есть строка и хочу, чтобы преобразовать его в массив байт шестнадцатеричного значения с использованием C#.

Байт - это всего лишь 8-битное значение. Вы можете представить ее как десятичную (например, 16) или шестнадцатеричную (например, 0x10).

Итак, что вы действительно хотите?

+0

Я думаю, что он ищет шестнадцатеричное представление байта. – Ryba

0

В случае, если вы действительно хотите, чтобы получить строку, содержащую шестнадцатеричное представление массива байт, вот как вы можете сделать это:

public static string BytesAsString(byte[] bytes) 
{ 
    string hex = BitConverter.ToString(bytes); // This puts "-" between each value. 
    return hex.Replace("-","");    // So we remove "-" here. 
} 
0

Похоже, вы смешиваете преобразование в массив и отображение данных массива.

Когда у вас есть массив байтов, это всего лишь массив байтов, и вы можете представлять его любым возможным способом: двоичный, десятичный, шестнадцатеричный, восьмеричный, любой ... но это справедливо только в том случае, если вы хотите визуально представить их.

Вот код, который вручную преобразует строку в массив байтов, а затем в массив строк в шестнадцатеричном формате.

string s1 = "Stack Overflow :)"; 
byte[] bytes = new byte[s1.Length]; 
for (int i = 0; i < s1.Length; i++) 
{ 
     bytes[i] = Convert.ToByte(s1[i]); 
} 

List<string> hexStrings = new List<string>(); 

foreach (byte b in bytes) 
{ 
    hexStrings.Add(Convert.ToInt32(b).ToString("X")); 
} 
Смежные вопросы