0

我尝试发送一个用于 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 中使用十六进制值。

4

0 回答 0