Возьми строку в байт [] - PullRequest
       9

Возьми строку в байт []

0 голосов
/ 19 апреля 2010

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

0x89504E470D0A1A0A0000000D49484452000000F00000014008020000000D8A66040....
<truncated for brevity>

Когда я загружаю его из базы данных, он поступает в виде байта []. Как я могу преобразовать строковое значение в байтовый массив самостоятельно. (Я пытаюсь удалить БД для некоторого кода тестирования.)

Ответы [ 6 ]

3 голосов
/ 19 апреля 2010
class Program
{
    static void Main()
    {
        byte[] bytes = StringToByteArray("89504E470D0A1A0A0000000D49484452000000");
    }

    public static byte[] StringToByteArray(string hex)
    {
        int length = hex.Length;
        byte[] bytes = new byte[length / 2];
        for (int i = 0; i < length; i += 2)
            bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
        return bytes;
    }
}
2 голосов
/ 19 апреля 2010

Я полагаю, что вы на самом деле пытаетесь преобразовать шестнадцатеричное число в байтовый массив.

Если это так, вы можете сделать это следующим образом: (сначала удалить 0x)

var bytes = new byte[str.Length / 2];
for(int i = 0; i < str.Length; i += 2)
    bytes[i / 2] = Convert.ToByte(str.Substring(i, 2), 16);

(проверено)

2 голосов
/ 19 апреля 2010

Похоже, вы спрашиваете, как преобразовать строку с определенной кодировкой в ​​байтовый массив.

Если это так, это зависит от того, как закодирована строка. Например, если у вас есть строка в кодировке base64, вы можете получить байтовый массив, используя:

asBytes = System.Text.Encoding.UTF8.GetBytes(someString);

Если кодировка шестнадцатеричная (как, по-видимому, в вашем примере), в BCL ничего не встроено, но вы можете использовать LINQ (, просто убрав 0x в начале первая строка ):

public static byte[] StringToByteArray(string hex) { 
    return Enumerable.Range(0, hex.Length). 
        Where(x => 0 == x % 2). 
        Select(x => Convert.ToByte(hex.SubString(x,2), 16)). 
        ToArray(); 
} 
1 голос
/ 19 апреля 2010

String в .NET означает «текст» - есть принципиальная разница с байтовым массивом, и нет отображения 1: 1 (как и для других сложных типов .NET).

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

int bytelength = (str.Length - 2) / 2;
byte[] result = new byte[byteLength]; // Take care of leading "0x"
for (int i = 0; i < byteLength; i++)
    result[i] = Convert.ToByte(str.Substring(i * 2 + 2, 2), 16);
1 голос
/ 19 апреля 2010

Если он входит как byte[], то это не строка

Что такое тип данных столбца? Varbinary

0 голосов
/ 19 апреля 2010

Преобразование строки в байтовый массив в C #
http://www.chilkatsoft.com/faq/dotnetstrtobytes.html

...