使用cfsocketsenddata发送二进制数据

时间:2013-10-22 22:06:03

标签: objective-c sockets networking hex cfsocket

我尝试为Wake on Lan发送UDP包。包的第一部分需要是十六进制代码的6 * FF,然后是十六进制的16 * mac地址。如何以十六进制值发送NSString?现在它将值255发送为32 35 35而不是FF。

我有以下代码:

        NSMutableString *messageData= [NSMutableString new];
        [messageData appendString: @"255255255255255255"];
        for (int i = 0; i <= 16; i++) {
            [messageData appendString:(@"%@ ",self.macAddress)];
        }

        char const *messageDataChar = [messageData UTF8String];
        CFDataRef Data = CFDataCreate(NULL, (const UInt8*)messageDataChar, strlen(messageDataChar));

        NSData *destAddrData = [NSData dataWithBytes:&addr length:sizeof(addr)];

        CFSocketError errorDetails = CFSocketSendData(socket, (__bridge CFDataRef) destAddrData, Data, 0);

Todo:补充广播,而不是发送到IP地址。

Wireshark显示在尝试使用mac地址时发送的以下包数据aa:bb:cc:dd:ee:ff:

0000  32 35 35 32 35 35 32 35 35 32 35 35 32 35 35 32   2552552552552552
0010  35 35 61 61 62 62 63 63 64 64 65 65 66 66 61 61   55aabbccddeeffaa
0020  62 62 63 63 64 64 65 65 66 66 61 61 62 62 63 63   bbccddeeffaabbcc
0030  64 64 65 65 66 66 61 61 62 62 63 63 64 64 65 65   ddeeffaabbccddee
0040  66 66 61 61 62 62 63 63 64 64 65 65 66 66 61 61   ffaabbccddeeffaa
0050  62 62 63 63 64 64 65 65 66 66 61 61 62 62 63 63   bbccddeeffaabbcc
0060  64 64 65 65 66 66 61 61 62 62 63 63 64 64 65 65   ddeeffaabbccddee
0070  66 66 61 61 62 62 63 63 64 64 65 65 66 66 61 61   ffaabbccddeeffaa
0080  62 62 63 63 64 64 65 65 66 66 61 61 62 62 63 63   bbccddeeffaabbcc
0090  64 64 65 65 66 66 61 61 62 62 63 63 64 64 65 65   ddeeffaabbccddee
00a0  66 66 61 61 62 62 63 63 64 64 65 65 66 66 61 61   ffaabbccddeeffaa
00b0  62 62 63 63 64 64 65 65 66 66 61 61 62 62 63 63   bbccddeeffaabbcc

我需要的是以下内容:

0000  ff ff ff ff ff ff aa bb cc dd ee ff aa bb cc dd   ................
0010  ee ff aa bb cc dd ee ff aa bb cc dd ee ff aa bb   ................

我无法真正找到如何使用目标C中的十六进制值。

0 个答案:

没有答案