int
配列内のMACアドレスをCの文字列に変換するにはどうすればよいですか? たとえば、次の配列を使用して MAC アドレスを格納しています。
int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};
これを次のような文字列に変換するにはどうすればよい"00:0d:3f:cd:02:5f"
ですか?
あなたはこれを行うことができます:
char macStr[18];
int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};
snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
array[0], array[1], array[2], array[3], array[4], array[5]);
大文字の文字列が必要な場合は、大文字の 'X' を使用します。
snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X",
array[0], array[1], array[2], array[3], array[4], array[5]);
unsigned char array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};//or BYTE
char str[19];
sprintf(str, "%02x:%02x:%02x:%02x:%02x:%02x",array[0],
array[1], array[2], array[3], array[4],array[5]);
まず、MAC アドレスの保存に使用するタイプを調整する必要があるでしょう。unsigned char
この場合は良いと思います。次に、MAC アドレスを書き込む関数を作成することをお勧めします。これprintf()
により、コード内のいたるところに同じステートメントをコピーして貼り付けたり、インデックス付けしている配列を調整したりしなくなります。(また、コンパイラは、関数パラメーターに対して使用している型をチェックして、それが正しいことを確認できます。)
に似た非リエントラント ソリューションとinet_ntoa()
、 に似たリエントラント ソリューションの両方を次に示しinet_ntoa_r()
ます。
#include <stdio.h>
unsigned char mac[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};
char* MACADDR_toString(unsigned char* addr)
{
static char str[18];
if(addr == NULL) return "";
snprintf(str, sizeof(str), "%02x:%02x:%02x:%02x:%02x:%02x",
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
return str;
}
char* MACADDR_toString_r(unsigned char* addr, char* str, size_t size)
{
if(addr == NULL || str == NULL || size < 18) return NULL;
snprintf(str, size, "%02x:%02x:%02x:%02x:%02x:%02x",
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
return str;
}
int main(int argc, char* argv[])
{
char str[18];
printf("%s\n", MACADDR_toString(mac));
printf("%s\n", MACADDR_toString_r(mac, str, sizeof(str)));
return 0;
}