Преобразовать массив 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];
}
Ответы
Ответ 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) и т.д., А не килобайты и мегабайты.