Wake on Lan の UDP パッケージを送信しようとしています。パッケージの最初の部分は、16 進コードの 6*FF の後に、16 進コードの 16 * MAC アドレスが続く必要があります。NSString を 16 進数値で送信するにはどうすればよいですか? 現在は、値 255 を FF ではなく 32 35 35 として送信しています。
次のコードがあります。
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 ................
Objective Cで16進値を操作する方法が本当にわかりません。