Xcode中如何使用C语言处理网络包
Posted
技术标签:
【中文标题】Xcode中如何使用C语言处理网络包【英文标题】:How to use C language in Xcode to deal with network packet 【发布时间】:2011-11-15 06:01:53 【问题描述】:我刚买了一个WIFI摄像头。我需要开发一个 iPad 应用程序来向这个摄像头发送一个 url 请求,然后在 iPad 中播放 mpeg4 流。
收到请求后,本相机向 iPad 发送回网络数据包。在每个数据包的开头,它包含 8 位无符号字符,指示该数据包的类型,例如视频或音频。
由于 NSData 是 16bit 格式,我如何获取第一个 8bit unsigned char 并识别此数据包的类型?
我认为我走错了路。我应该关注数据包层,了解如何使用C语言处理网络数据包。但是,我现在不擅长 C 语言。谁能告诉我如何使用C来控制网络数据包。
【问题讨论】:
Objective-C 是 C 的超集。如果您使用 Objective-C 编写代码,您应该明确地学习更多关于 C 的东西。 谢谢麦克马德。我绝对需要学习更多的 C 编程。我在 C 中遗漏了太多基本概念。 如果您知道如何在 Objective-C 中编写代码,这并不难。尤其要了解指针/指针算法、强制类型转换、内在类型、结构、动态内存分配……成为一名优秀的 C 程序员只会让你成为一名更好的 Objective-C 程序员。 【参考方案1】:如果您使用的是 NSData 对象,则可以使用bytes
方法检索指向 NSData 内容的指针。
此方法返回一个void
指针。您可以将其分配给任何您想要的。
例如:
unsigned char * x = [ myDataObject bytes ];
将允许您读取每个字节(8 位)的 NSData 内容,因为您有一个 char
指针。
x[ 0 ]
将是第一个字节,x[ 1 ]
将是第二个字节,依此类推。
如果你使用其他类型,你会得到不同的结果。例如:
unsigned short int * x = [ myDataObject bytes ];
假设unsigned short int
在您的平台上是 16 位(可能会有所不同),那么您将按 16 位访问 NSData 内容。
在最后一个示例中,x[ 0 ]
将是前 16 位,等等...
指针运算也是如此。
【讨论】:
嗨 Macmade,我已经在我的应用程序中尝试过这个。但是,它只是给了我不可读的字符。 typedef struct guchar content_type; gint media_header_length; 流。这是数据包开头的格式。这就是我这样做的原因。以上是关于Xcode中如何使用C语言处理网络包的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 13如何使用本地Swift包(Swift Package)