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

标签 objective-c pointers

我需要字节交换一些表示无符号 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/

相关文章:

ios - 在后台每 X 分钟执行一次函数不起作用

objective-c - NSUserNotification 关闭调用 didActivateNotification

ios - iOS-AFNetworking GET方法中不兼容的 block 指针类型

c++ - 从函数返回 this 指针的重要用途是什么?

C 矩阵和指针错误

ios - 无法从包装在 NSValue 中的结构中获取值(value)

ios - 同一个 UIViewController 中的两个 UITableView

java - 空指针异常

c++ - 一种在C++中交换两个引用的方法

c - 了解向函数传递地址以及返回指针的函数