Преобразовать массив char [] в byte [] и наоборот? C ++ - PullRequest
12 голосов
/ 18 мая 2009

Каков наилучший способ преобразования массива символов в байты и наоборот?

Решение:

void CharToByte(char* chars, byte* bytes, unsigned int count){
    for(unsigned int i = 0; i < count; i++)
        bytes[i] = (byte)chars[i];
}

void ByteToChar(byte* bytes, char* chars, unsigned int count){
    for(unsigned int i = 0; i < count; i++)
         chars[i] = (char)bytes[i];
}

Ответы [ 4 ]

13 голосов
/ 18 мая 2009

Тип char - это один из немногих типов, размер которого гарантирован стандартом ANSI и равен 1 байту. Насколько я знаю, C не определяет тип байта напрямую. Однако было бы просто безумно иметь тип с именем byte, который на самом деле не является байтом по размеру. Поэтому простой актерский состав должен помочь.

7 голосов
/ 18 мая 2009

В C ++ нет типа байтов, и в соответствии со стандартом:

Edit:

1,7

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

5.3.3:

sizeof (char), sizeof (подписанный char) и sizeof (без знака) 1; результат sizeof применяется к любому другому Основной тип (3.9.1) реализации.

4 голосов
/ 18 мая 2009

В C ++ нет байтового типа. Вы можете набрать «unsigned char» в «byte», если это делает его лучше. На самом деле это все, что байт находится в C ++ - беззнаковый символ. Кроме того, да, я бы бросил ... но этот бросок лучше:

unsigned_char_arr[i]= static_cast<unsigned char>(char_arr[i]);

или ... просто используйте массив char и приведите его, когда его нужно интерпретировать как неподписанный символ ...

1 голос
/ 18 мая 2009

Почти в каждой реализации C ++, с которой вы столкнетесь, char - это точно a byte октет. Это не гарантируется стандартом C ++, но практически всегда так. char всегда имеет размер , по крайней мере, 8 бит, а точное число бит определяется константой препроцессора CHAR_BIT. Кроме того, оператор sizeof() сообщает вам размер объекта / типа в терминах количества char s, а не числа байтов октетов, так что если вы работали в какой-то странной системе с 16-битный char и 32-битный int, тогда sizeof(int) будет 2, а не 4.

РЕДАКТИРОВАТЬ: Заменен байт на октет. char гарантированно будет байтом по стандарту C, но байт не обязательно будет октетом, который составляет ровно 8 бит. Если вы когда-либо читали какую-либо французскую техническую литературу, они всегда используют «октет» вместо «байт», и у них есть килоктет (КО), мегаоктет (МО) и т. Д. Вместо килбайт и мегабайт.

...