0

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進値を操作する方法が本当にわかりません。

4

0 に答える 0