16-битный шестнадцатеричный код и переменные - PullRequest
0 голосов
/ 22 января 2012

Я пытаюсь отправить следующий гекс в NSOutputstream 0x0000000e000000010000001000003014

Я могу отправить 8-битный шестнадцатеричный код со следующим кодом:

long myhex = 0x0000000e00000001;    

NSData *data = [[NSData alloc] initWithBytes:&myhex length: sizeof(myhex)];
[outputStream write:[data bytes] maxLength:[data length]];

Проблема в том, когда я пытаюсь это сделать:

long myhex = 0x0000000e000000010000001000003014;

говорит, что "целочисленная константа слишком длинна для своего типа"

Кажется, я не могу понять, какой тип целого числа будет, кроме этого шестнадцатеричного значения.

1 Ответ

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

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

Таким образом, для отправки произвольно длинных данных в любом порядке используйте массив байтов (unsigned char или, предпочтительно, uint8_t из stdint.h), например ::

uint8_t dataBytes[] = { 0x00, … , 0x0e, … 0x30, 0x14 };
NSData *data = [[NSData alloc] initWithBytes:dataBytes length:sizeof(dataBytes)];
...