gpt4 book ai didi

ios - 向 BLE 设备发送 int 数据

转载 作者:行者123 更新时间:2023-11-29 00:41:30 24 4
gpt4 key购买 nike

我有 4 个不同的 int 值需要发送到 BLE 设备(连接建立正常)。

为了清楚起见,我将调用 int 值 A、B、C、D。 A和B的范围在0-100之间,C的范围是0-2000,D的范围是0-10000。所有值均由用户输入确定。

我需要快速连续地将这四个值发送到 BLE 设备,并对它们分别进行不同的封装:A 和 B(8 位)、C(16 位)和 D(32 位)。我不确定如何正确打包这些值。

以下是我尝试过并取得不同程度成功的三种方法。

  1. 将 int 转换为数据并发送,例如对于 A(8 位)整数:

     const unsigned char CHR = (float)A;
    float size = sizeof(CHR);
    NSData * aData = [NSData dataWithBytes:&CHR length:size];
    [p writeValue:aData forCharacteristic:aCHAR type:CBCharacteristicWriteWithResponse];
  2. 首先转换为字符串,例如对于(16 位)C:

    NSString * cString = [NSString stringWithFormat:@"%i",C];
    NSData * cData = [cString dataUsingEncoding:NSUTF16StringEncoding];
    [p writeValue:cData forCharacteristic:cCHAR type:CBCharacteristicWriteWithResponse];
  3. 使用 uint,例如对于(32 位)D 整数:

    uint32_t val = D;
    float size = sizeof(val);
    NSData * dData = [NSData dataWithBytes:(void*)&val length:size];
    [p writeValue:valData forCharacteristic:dCHAR type:CBCharacteristicWriteWithResponse];

我在上面做错了什么,以及如何最好地转换和发送一个 int 值到设备,允许所需的 3 种格式?

最佳答案

您需要了解有关设备所需格式的更多信息:

假设您想使用 iOS 使用的小端格式,则可以使用 dataWithBytes -

unsigned char a = 100
NSData *aData = [NSData dataWithBytes:&a length:sizeof(i)];

UInt16 c = 1000
NSData *cData = [NSData dataWithBytes:&c length:sizeof(c)];

Unit32 d = 10000
NSData *dData = [NSData dataWithBytes:&d length:sizeof(d)];

然后使用writeValue:forCharacteristic:type:编写NSData

如果设备需要大端数据,那么您将需要将字节操作为正确的顺序。因此,将数值作为 ASCII 字符串发送并在接收端将其转换回数值通常会更容易,但这取决于您是否可以控制设备期望的格式。

关于ios - 向 BLE 设备发送 int 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39374751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com