質問

C言語で
*argv[]にMacAddress00-0F-1F-16-80-F4などを入力し、
それをバイナリに変換して、int8_t mac_add[6]みたいなものに
代入したいと思っているのですが、
方法がわからず苦戦しております。
宜しくお願い致します。

イメージ
mac_add[0] = 00←バイナリ以下同じ
mac_add[1] = 0F
mac_add[2] = 1F
mac_add[3] = 16
mac_add[4] = 80
mac_add[5] = F4

通報する

回答 (3件)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef unsigned char int8_t;

int main(int argc, char*argv[]){
int i;
int8_t mac_add[6];
char *wk, *p;

wk=strdup(argv[argc-1]);
for(i=0, p=strtok(wk, "-\n");NULL!=p;p=strtok(NULL, "-\n"))
mac_add[i++]=(int8_t)strtoul(p, NULL, 16);

for(i=0;i<6;i++)
printf("mac_add[%d] = %02X\n", i, mac_add[i]);

return 0;
}

この回答へのお礼

ご返事が遅れ申し訳ございませんでした。
無事解決でしました、有り難うございました。

フォーマットがはっきりしているならsscanfで一発ですが。

char * in = "00-0F-1F-16-80-F4";
int8_t mac_add[6];

sscanf(" %hhx-%hhx-%hhx-%hhx-%hhx-%hhx ",
&mac_add[0], &mac_add[1], &mac_add[2], &mac_add[3], &mac_add[4], &mac_add[5]);

なお、上記は適当に書いたので動作は保障しません。

この回答へのお礼

ご返事が遅れ申し訳ございませんでした。
無事解決でしました、有り難うございました。

strtol関数を駆使すれば出来ますね
たとえば以下のような感じ

char mac_add[6];
char *strIn = "00-0F-1F-16-80-F4";
char *p;
int i;
for ( p = strIn, i = 0; i < 6; i++)
{
 mac_add[i] = strtol(p, &p, 16);
 if ( !p || '\0' == *p ) break;
 if ( '-' == *p ) ++p;
}

#てきとーに作成したものなので保証はしません ^^;

この回答へのお礼

ご返事が遅れ申し訳ございませんでした。
無事解決でしました、有り難うございました。

このQ&Aは役に立ちましたか?2 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事

おしトピへのコメントで10人に1人に500円分のギフト券プレゼント!(先着2000名様)

話題のトピックにさくっとコメントできる「おしトピ」で指定のオーダー3件にコメントした方先着2000名様の10人に1人にギフト券をプレゼント!
フジテレビ出身のフリーアナウンサー長谷川豊氏の質問にも回答受付中!

このQ&Aを見た人が検索しているワード


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集