2012-01-11 3 views
-2
char * data = 0xFF000010FFFFFFFFFFFFFFFFFFFFFFFFFFF; 

Я хочу, чтобы получить двойное слово в data[1] (0x00000010) и хранить его в вар int i.Получение двойного слова из двоичных данных

Будет ли это делать трюк?

int i = (int) data[1]+data[2]+data[3]+data[4] 
+3

Ответ зависит от того, является ли ваша платформа большой или малодушной. Однако это не сработает. –

ответ

2

Вы пытаетесь просто добавить четыре байта вместо того, чтобы поместить значения в правильную часть целого числа. Без указания endianness вашей платформы невозможно дать окончательный ответ.

Общий подход заключается в размещении каждого байта в правильном положении Int, что-то вроде этого:

INT I = 256 * 256 * 256 * данные [0] + 256 * 256 * Данные [1] + 256 * данные [2] + данные [3]

(большой байтов пример)

Обратите внимание, что индексы равны 0 на основе, а не на основе 1, как в вашем примере. «Базой» в этом примере является 256, потому что каждый байт может представлять 256 значений.

Чтобы понять, почему это так, рассмотрим десятичное число

Вы можете переписать, что, как:

5000 + 200 + 30 + 4

или 10 * 10 * 10 * 5 + 10 * 10 * 2 + 10 * 3 + 4

Как вы обрабатываете данные для каждой цифры, вы умножаете значение на число-base-to-the-power-of- значный-позиции (самая правая цифра для основания 10 равна 10^0, затем 10^1, 10^2 и т. д.).

1

Вы должны преобразовать из своей строки в фактические данные. Подумайте об использовании atol() или чего-то подобного, чтобы получить значение в памяти, а затем подумайте о его редактировании.

Смежные вопросы