C преобразует массив символов, считанный из двоичного файла, в целое число

#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() помощью или эквивалентной функции.