Во-первых, обычно лучше использовать тип unsigned char
для байтов необработанных двоичных данных, потому что это правильно выражает семантику того, с чем вы работаете. Тип char
, хотя он может и используется слишком часто в качестве синонима "байта", лучше зарезервирован для данных, которые на самом деле носят символический характер.
В случае, если, кроме того, вы выполняете арифметику с байтовыми значениями, вы почти наверняка захотите unsigned char
вместо char
, поскольку подпись char
определяется реализацией. Это зависит от реализации, и во многих распространенных реализациях char
имеет подпись .
С учетом сказанного ваша основная проблема выглядит простой. Вы сказали
166 в шестнадцатеричном формате (N [0] = 6, N [1] = 16) вернет 5638 (в коротком значении).
, но 0x166, упакованный в двухбайтовый массив с прямым порядком байтов, будет (N [0] = 0x66, N [1] = 0x1). То, что вы написали, будет соответствовать 0x1606, что в действительности соответствует десятичному 5638.