Подтвердить что ты не робот

Преобразовать массив char [] в байт [] и наоборот? С++

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

Решение:

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];
}
4b9b3361

Ответ 1

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

Ответ 2

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

Edit:

1.7

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

5.3.3

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

Ответ 3

В С++ нет байтового типа. Вы можете ввести typedef 'unsigned char' в 'byte', если это сделает его более приятным. Действительно, все байты находятся в С++ - unsigned char. Кроме того, да, я бы бросил... но этот литье лучше:

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

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

Ответ 4

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

EDIT: Замененный байт октетом. A char гарантированно является байтом по стандарту C, но байту не гарантируется быть октетом, который составляет ровно 8 бит. Если вы когда-либо читали какую-либо французскую техническую литературу, они всегда используют "октет" вместо "байта", и у них есть килоэктаты (KO), мегаоктеты (MO) и т.д., А не килобайты и мегабайты.