Получение двойного слова из двоичных данных - PullRequest
0 голосов
/ 11 января 2012
char * data = 0xFF000010FFFFFFFFFFFFFFFFFFFFFFFFFFF;

Я хочу получить ДВОЙНОЕ СЛОВО в data[1] (0x00000010) и сохранить его в var int i.

Это бы сработало?

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

Ответы [ 2 ]

2 голосов
/ 11 января 2012

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

Общий подход состоит в том, чтобы поместить каждый байт в правильную позицию int, как-то так:

int i = 256 * 256 * 256 * данные [0] + 256 * 256 * данные [1] + 256 * данные [2] + данные [3]

(пример с прямым порядком байтов)

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

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

5234

-пишите это как:

5000 + 200 + 30 + 4

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

Когда вы обрабатываете данные для каждой цифры, вы умножаете значение на позицию «число-основание-на-число-сила-цифры» (крайняя правая цифра для основания 10 равна 10 ^ 0, затем 10 ^ 1, 10 ^2 и т. Д.).

1 голос
/ 11 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...