アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

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;
}

#てきとーに作成したものなので保証はしません ^^;
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/01 15:29

#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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/01 16:17

フォーマットがはっきりしているなら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]);

なお、上記は適当に書いたので動作は保障しません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/01 16:17

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