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