首页 > 解决方案 > 通过 UDP 发送 hexString 数据

问题描述

我正在开发一个 iOS 应用程序。我遇到了一个问题。

我正在尝试通过 UDP 将 hexString 数据发送到 wifi 摄像头,该摄像头会在获取正确数据时做出响应。我的代码如下所示。但是我无法从我的 wifi 摄像头得到任何响应。(我正在使用 https://github.com/robbiehanson/CocoaAsyncSocket

NSString *sendMsg = @"6745000005000000000000000000000000000000000000001400000067450000140000000A"; 
NSData *bytes = [sendMsg dataUsingEncoding:NSUTF16BigEndianStringEncoding]; 
NSString *host = @"255.255.255.255"; 
[self.udpSocket sendData:bytes toHost:host port:ListenPort withTimeout:-1 tag:1];

此外,我尝试通过 PacketSender 发送我的数据(应用程序可以发送 UDP 数据),它具有正确的响应。

在此处输入图像描述

标签: iosudpcocoaasyncsocket

解决方案


问题已解决。问题是在将 NSString 转换为 NSData 时。它是需要转换为 NSData 的十六进制字符串。以下是我的有效代码。

- (NSData *)dataFromHexString:(NSString *)hexString {
    NSAssert((hexString.length > 0) && (hexString.length % 2 == 0), @"hexString.length mod 2 != 0");
    NSMutableData *data = [[NSMutableData alloc] init];
    for (NSUInteger i=0; i<hexString.length; i+=2) {
        NSRange tempRange = NSMakeRange(i, 2);
        NSString *tempStr = [hexString substringWithRange:tempRange];
        NSScanner *scanner = [NSScanner scannerWithString:tempStr];
        unsigned int tempIntValue;
        [scanner scanHexInt:&tempIntValue];
        [data appendBytes:&tempIntValue length:1];
    }

return data;}

推荐阅读