Мне нужно представить NSInteger и NSString в массив байтов. Ниже приведены образцы того, что я ищу.
Для того, как это harcodings работает нормально. Я хочу сделать это через код. Любая подсказка.
Во-первых, NSInteger в байты Hex:
NSInteger test = 1;
unsigned char byte[] = { 0x00, 0x01 };
NSInteger test = 16;
unsigned char byte[] = { 0x00, 0x10 };
NSData *data = [NSData dataWithBytes:byte length:sizeof(byte)];
Во-вторых, NSString в байты Hex:
NSString *test = @"31C5B562-BD07-4616-BCBD-130BA6822790";
unsigned char byte[] = {0x31, 0xC5, 0xB5, 0x62, 0xBD, 0x07, 0x46, 0x16, 0xBC, 0xBD, 0x13, 0x0B, 0xA6, 0x82, 0x27, 0x90};
NSData *data = [NSData dataWithBytes:byte length:sizeof(byte)];
Я пробовал с приведенным ниже кодом, и он хорошо работает для моего UUID, но для работы NSInteger мне нужно отправить «0010» вместо 16 и «0001» вместо 1. Итак, любая подсказка о том, как сделать это преобразование.
- (NSData *)hexData {
NSMutableData *hexData = [NSMutableData data];
int idx = 0;
for (idx = 0; idx+2 <= self.length; idx+=2) {
NSRange range = NSMakeRange(idx, 2);
NSString* hexStr = [self substringWithRange:range];
NSScanner* scanner = [NSScanner scannerWithString:hexStr];
unsigned int intValue;
[scanner scanHexInt:&intValue];
[hexData appendBytes:&intValue length:1];
}
return hexData;
}
РЕДАКТИРОВАТЬ:
int8_t test = -59;
int8_t bytes = CFSwapInt16HostToBig(test);
NSData *data1 = [NSData dataWithBytes:&bytes length:sizeof(bytes)];
Достижение как 0xFF вместо 0xC4