更优雅的替代(*(uint16_t*)[[NSData] bytes])?

Kev*_*vin 4 pointers objective-c

我需要字节交换一些表示无符号16位整数的字节.以下代码有效,但似乎有点荒谬:

CFSwapInt16(*(uint16_t*)[[myNSDataVariable] bytes]);
Run Code Online (Sandbox Code Playgroud)

以下是我推断的内容:

[[myNSDataVariable] bytes] 返回一个指向字节数组的void指针.

(uint16_t*)void指针强制转换为uint16_t指针.

最后的外部*解引用uint16_t指针,提供对实际uint16_t值的访问.

是否有更优雅的方式来获得uint16_t价值NSData

Rob*_*ier 5

我会说以下内容更具可读性:

uint16_t *valuePtr = (uint16_t *)[myNSDataVariable bytes];
uint16_t swappedValue = CFSwapInt16(*valuePtr);
Run Code Online (Sandbox Code Playgroud)

但最终你会在某个地方进行这种转换.如果您不止一次这样做,我建议使用一个更清晰的功能:

uint16_t SwappedIntegerFromData(NSData *data) {
    uint16_t *valuePtr = (uint16_t *)[data bytes];
    return CFSwapInt16(*valuePtr);
}

uint16_t value = SwappedIntegerFromData(myNSDataVariable);
Run Code Online (Sandbox Code Playgroud)

但同样,转换必须在某个地方进行.