将NSString转换为uint8_t为appendBytes:length

时间:2014-11-14 21:56:50

标签: objective-c bluetooth byte nsdata

我需要转换NSStringint,以便我可以使用NSData appendBytes:length。

@"734" or 734

uint8_t _steps[2];
_steps[0] = 0x02;
_steps[1] = 0xde;
[_data appendBytes:_steps length:2];

实施例

- (void)sendSteps:(NSString*)steps
{
    NSMutableData *_data = [[NSMutableData alloc] init];

    // Need to get (NSString*)steps converted like below:
    uint8_t _steps[2];
    _steps[0] = 0x02;
    _steps[1] = 0xde;

    [_data appendBytes:_steps length:2];
}

我尝试了什么

NSData * _steps = [(NSString*)activity[@"steps"] dataUsingEncoding:NSUTF8StringEncoding];
[_data appendBytes:[_steps bytes] length:[_steps length]];

uint8_t * _steps = (uint8_t *)[(NSString*)activity[@"steps"] UTF8String];
[_data appendBytes:_steps length:strlen((char*)_steps)];

期望的结果

734”的理想结果是 02de

1 个答案:

答案 0 :(得分:1)

您想要的代码是

int stepsIntValue = [(NSString*)activity[@"steps"] intValue];

uint8_t _steps[2];
_steps[0] = (stepsIntValue >> 8) & 0xFF;
_steps[1] = stepsIntValue & 0xFF;

[_data appendBytes:_steps length:2];

我不明白实际用途。

你是否只会拉2个字节?如果是,那么为什么不使用htons(3)

uint16_t _steps = htons([(NSString*)activity[@"steps"] intValue]);
[_data appendBytes:&_steps length:sizeof _steps];

当您提取数据时,您可以使用ntohs(3)

_steps = ntohs(*(uint16_t *)[_data bytes]);