代码之家  ›  专栏  ›  技术社区  ›  Jatoi 123

如何将字符串转换为NSData以将其传递给BLE设备?

  •  0
  • Jatoi 123  · 技术社区  · 7 年前

    NSString * str = @"Hello World";
    NSString * hexStr = [NSString stringWithFormat:@"%@",
                         [NSData dataWithBytes:[str cStringUsingEncoding:NSUTF8StringEncoding] 
                                        length:strlen([str cStringUsingEncoding:NSUTF8StringEncoding])]];
    
    for(NSString * toRemove in [NSArray arrayWithObjects:@"<", @">", @" ", nil]) 
        hexStr = [hexStr stringByReplacingOccurrencesOfString:toRemove withString:@""];
    
    NSLog(@"%@", hexStr); 48656c6c6f20776f726c64
    

    但困难的部分就是从那开始的。如何将每两个十六进制分隔为uint8\u t。因为我不知道长度,但用户可以写任何长度的字符串,这将是巨大的十六进制。如果我知道长度,我可以这样做

    NSMutableData *concatenate = [NSMutableData data];
    uint8_t first=0x48;
    uint8_t second = 0x56;
    uint8_t third = 0x6c;
    uint8_t fourth = 0x6f;
    uint8_t fifth=0x20;
    uint8_t sixth=0x77;
    uint8_t seventh=0x6f;
    uint8_t eighth=0x72;
    uint8_t ninth=0x6c;
    uint8_t tenth=0x64;
    
    NSData* one = [NSData dataWithBytes:(void*)&first length:sizeof(first)];
    NSData* two = [NSData dataWithBytes:(void*)&second length:sizeof(second)];
    NSData* three = [NSData dataWithBytes:(void*)&third length:sizeof(third)];
    NSData* four = [NSData dataWithBytes:(void*)&fourth length:sizeof(fourth)];
    NSData* five = [NSData dataWithBytes:(void*)&fifth length:sizeof(fifth)];
    NSData* six = [NSData dataWithBytes:(void*)&sixth length:sizeof(sixth)];
    NSData* seven = [NSData dataWithBytes:(void*)&seventh length:sizeof(seventh)];
    NSData* eight = [NSData dataWithBytes:(void*)&eighth length:sizeof(eighth)];
    NSData* nine = [NSData dataWithBytes:(void*)&nineth length:sizeof(nineth)];
    NSData* ten = [NSData dataWithBytes:(void*)&tenth length:sizeof(tenth)];
    
    [concatenate appendData:one];
    [concatenate appendData:two];
    [concatenate appendData:three];
    [concatenate appendData:four];
    [concatenate appendData:five];
    [concatenate appendData:six];
    [concatenate appendData:seven];
    [concatenate appendData:eight];
    [concatenate appendData:nine];
    [concatenate appendData:ten];
    

    但当我不知道长度时,我就不知道了。如有任何帮助或线索,我们将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Vasily Avilov    7 年前

    NSString* str = @"Hello World";
    NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
    

    接下来,您将此数据发送到设备

    [discoveredPeripheral writeValue:data forCharacteristic:charForValue type:CBCharacteristicWriteWithResponse];
    

    在这里,您可以从设备或不从设备发送带有响应的数据。当然,您的设备应该准备好接收此类数据,并有/无响应。

    为了理解DiscoveryPeripheral是您从中收到的变量

    -(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
    

    - (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
    

    用于必要的服务和特性。