int
アレイ内のMACアドレスをCの文字列に変換するにはどうすればよいですか?例えば、私はMACアドレスを保存するために、以下の配列を使用しています:どのようにMACアドレス(配列内)をCの文字列に変換しますか?
int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};
どのように私は"00:0d:3f:cd:02:5f"
のように、文字列にこれを変換するのですか?
int
アレイ内のMACアドレスをCの文字列に変換するにはどうすればよいですか?例えば、私はMACアドレスを保存するために、以下の配列を使用しています:どのようにMACアドレス(配列内)をCの文字列に変換しますか?
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]);
unsigned char array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};//or BYTE
char str[19];
sprintf(str, "%02x:%02x:%02x:%02x:%02x:%02x:%02x",array[0],
array[1], array[2], array[3], array[4],array[5]);
コールのsprintf()^_ ^:
#include <stdio.h>
int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};
void macaddress_str(int a[], char *buf)
{
int i;
for (i = 0; i < 5; i++, buf += 3)
sprintf(buf, "%02X:", a[i]);
sprintf(buf, "%02X", a[i]);
}
int main()
{
char buf[100];
macaddress_str(array, buf);
printf("%s\n", buf);
return 0;
}
まず、あなたはおそらく、あなたが使うタイプを調整したいです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;
}
[(s)(sn)printf()](http://linux.die.net/man/3/printf)はあなたの友人です。 –
MACアドレスの各バイトの 'int'は? O.o – mpontillo
私は知っている、それは少し大きいです! – user2131316