#c #c 11 #visual-c #c 17
#c #c 11 #visual-c #c 17
Вопрос:
Следующий код должен прочитать 4 байта из двоичного файла, сохранить значение в массиве символов, а затем преобразовать его в целое число. Это работает хорошо, но мне просто интересно, почему или как может работать последняя строка кода, т.Е. result = (int)r_buff[3] ((int)r_buff[2]<< 8) ((int)r_buff[1]<<16) ((int)r_buff[0]<<24);
.
2-й, что здесь <<
делает символ?
3-й, какие-нибудь лучшие заменяющие коды этого?
Большое спасибо.
Источник, который я видел, был изначально из http://www.cplusplus.com/forum/beginner/16887 /.
int buf_size = 4;
char r_buff[buf_size-1];
int resu<
string b_file = "my_binary_file.bin";
ifstream reader;
reader.open(b_file , ios::in | ios::binary);
reader.read(r_buff, buf_size);
result = (int)r_buff[3] ((int)r_buff[2]<< 8) ((int)r_buff[1]<<16) ((int)r_buff[0]<<24);
Комментарии:
1. прочитайте о << здесь: en.cppreference.com/w/cpp/language/operator_arithmetic
2. Узнайте о том, как работают биты, операторы сдвига битов и многобайтовые целочисленные порядковые номера. Кроме того, в вашем коде есть 2 ошибки — выделение 3-байтового массива для чтения 4-байтового значения и использование нестандартного способа выделения этого массива. Существует более простой способ чтения 4-байтового целого числа без использования
char[]
массива вообще:int32_t resu< reader.read(reinterpret_cast<char*>(amp;result), 4);
и затем вы можете поменять местами конец целого числа, если это необходимо, например, сntohl()
помощью или эквивалентной функции.