2013-03-19 4 views
0

Как преобразовать целое число из 6 цифр, такое как «1234674» в шестнадцатеричные 4 байта NSData в Objective-C?Преобразование Unsigned Int в шестнадцатеричное значение

Это часть нашего кода, который посылает отмычка:

#define HSL_PRIVATE_SERVICE_UUID 0xFF20 
#define HSL_PRIVATE_NEW_PASSKEY_UUID 0xFF35 
unsigned int newPassKey = [_confirmNewPassKey.text intValue]; 
NSLog(@"newPasskey %d", newPassKey); 
NSData *d = [NSData dataWithBytes:&newPassKey length:sizeof(unsigned int)]; 
[_t writeValue:HSL_PRIVATE_SERVICE_UUID characteristicUUID:HSL_PRIVATE_NEW_PASSKEY_UUID p:_peripheral data:d]; 

Я сделал захват воздуха по сравнению BTOOL против пишет iPhone отмычка.

BTOOL (Инструмент имитатор) писал (правильный результат):

0x40e201 

iPhone писал (неверные данные):

0x0001e240 

Не уверен, что происходит и как это исправить в приложение, чтобы результат совпал с ожидаемым устройством Bluetooth. Я хотел бы, чтобы результат был таким же, как BTOOL.

+3

Контур вашего хоста не совпадает с контентом протокола. Для преобразования требуется 'hton *' или 'ntoh *'. –

+0

Я не уверен, как это работает с NSLog, но обычно вы можете сделать это с помощью строки формата, используя '% x' вместо'% d'. См. Http://en.wikipedia.org/wiki/Printf_format_string - Изменить: игнорировать. @ Даниэль Фишер ответил тебе. – nonsensickle

ответ

1

Попробуйте это:

uint32_t value = [_confirmNewPassKey.text intValue]; 
uint32_t swapped = CFSwapInt32HostToBig(value); 
NSData *d = [NSData dataWithBytes:&swapped length:sizeof(swapped)]; 

Это предполагает, что вы хотите большой обратный порядок байт для выхода.