objective-c – 对于Apple实现(CocoaCocoaTouch),uint8_t总是与unsigned char相同的类型?

objective-c – 对于Apple实现(CocoaCocoaTouch),uint8_t总是与unsigned char相同的类型?,第1张

概述在浏览iPhone的示例代码应用程序时,我发现了一对有效具有相同签名定义的发送/接收方法,但与其中一个变量关联的值类型除外. 从标题内: - (void)receivedData: (unsigned char *)data length:(NSUInteger)len;- (void)sendData: (uint8_t*) data length:(NSUInteger) 在浏览iPhone的示例代码应用程序时,我发现了一对有效具有相同签名定义的发送/接收方法,但与其中一个变量关联的值类型除外.

从标题内:

- (voID)receivedData: (unsigned char *)data length:(NSUInteger)len;- (voID)sendData:     (uint8_t*)       data length:(NSUInteger) len;

这些方法用作发送/接收过程的包装器,它有效地传递指向正在写入数据流和从数据流写入的数据的字节数组的指针.我发现这些方法签名有点好奇,因为我是Cocoa / Cocoa touch dev的新手,所以我决定查看uint8_t类型的定义.我发现uint8_t被定义为stdint.h中的unsigned char,因此这些方法的数据变量完全相同.至少,在XCode 4.2中链接的stdint.h就是这种情况.

但是,对uint8_t类型做了一些进一步的研究,我发现this question关于uint8_t与unsigned char的用法.共识似乎是这两种值类型完全相同但是对于C标准库的一些实现,它们可能是不同的.因此,人们不应相信在生成可移植代码时它们将是相同类型的数据.

话虽如此,从Apple / Objective-C编程环境中假设uint8_t与unsigned char相同或者我应该遵循上述问题中给出的相同建议是否安全?

这可能看起来像一个挑剔的问题,但是因为我可能正在集成库,这种类型的编码错误行为似乎在个人代码库中有点普遍,可以在多个Apple环境中使用(相当长一段时间)来了),我想进一步评论.

解决方法 忽略可移植性问题(正如你暗中要求我们这样做),在Mac OS X及其衍生产品(如iOS)下,char似乎不太可能是8位值.我想你可以放心地假设unsigned char和uint8_t将永远相同.

也就是说,我认为作为一种程序员的文档形式,当你处理一个意味着保存一个字节的二进制数据而不是字符的值时,使用“byte”或“uint8_t”似乎更聪明或者一些类似的方法,向未来的读者表明函数的意图是将值视为字节而不是字符本身.

总结

以上是内存溢出为你收集整理的objective-c – 对于Apple实现(Cocoa / CocoaTouch),uint8_t总是与unsigned char相同的类型?全部内容,希望文章能够帮你解决objective-c – 对于Apple实现(Cocoa / CocoaTouch),uint8_t总是与unsigned char相同的类型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1015323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存