Я думаю, что @templatetypedef правильный, он выглядит как код, который создает 16-битное значение путем логического ИЛИ с двумя 8-битными значениями. (так как он или два элемента из вашего массива байтов).
Логическое ИЛИ из двух битов в основном означает, что если один из битов равен 1
, то результат равен 1 («этот бит ИЛИ этот бит»).
В качестве дополнительного примера рассмотрим эту функцию, которая берет указатель на символ (размером 8 бит) и возвращает целое число (в этой реализации это означает 32 бита).
int Read32(const char *pcData)
{
return ( (pcData[3]<<24) & 0xff | pcData[2]<<16 | pcData[1]<<8 | pcData[0]);
}
Если pcData
- указатель на массив char
- тогда он берет третий найденный символ и сдвигает его на 24 бита:
, например
если pcData[3]
было 10110001, то теперь
10110001000000000000000000000000
Он принимает это 32-битное значение, а затем ИЛИ с помощью pcData [2], смещенного на 16 битов, что означает, что если pcData[2]
равно 11111111
, то 32-битное значение теперь равно:
10110001111111110000000000000000
и т. Д. С pcData[1]
и pcData[0]
.