我需要字节交换一些表示无符号 16 位整数的字节。下面的代码有效,但看起来有点荒谬:
CFSwapInt16(*(uint16_t*)[[myNSDataVariable] bytes]);
这是我推断的结果:
[[myNSDataVariable] bytes]
返回指向字节数组的空指针。
(uint16_t*)
将 void 指针转换为 uint16_t
指针。
最终的外部 *
取消引用 uint16_t
指针,提供对实际 uint16_t
值的访问。
有没有更优雅的方法从 NSData
获取 uint16_t
值?
最佳答案
我会说以下内容更具可读性:
uint16_t *valuePtr = (uint16_t *)[myNSDataVariable bytes];
uint16_t swappedValue = CFSwapInt16(*valuePtr);
但最终您要在某个地方进行这种转换。如果你不止一次这样做,我会推荐一个函数来让它更清晰:
uint16_t SwappedIntegerFromData(NSData *data) {
uint16_t *valuePtr = (uint16_t *)[data bytes];
return CFSwapInt16(*valuePtr);
}
uint16_t value = SwappedIntegerFromData(myNSDataVariable);
但同样,转化必须到达某个地方。
关于objective-c - 更优雅的替代 (*(uint16_t*)[[NSData] bytes])?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38358373/