1.文字列型をshort型に変換する方法
2.MACアドレス文字列(AA:BB:CC:DD:EE:FF)をchar型の配列に格納する方法
1. atoiという関数を使います
#include <stdlib.h>
short s = (short)atoi(”12345”);
2. こんなの例ではどうでしょうか。
#include <stdio.h>
int main(int argc, char** argv)
{
const char* ptr = ”AA:BB:CC:DD:EE:FF”;
char tmp[6][3];
int i;
for( i = 0; i < 6; i++ ){
tmp[i][0] = ptr[0];
tmp[i][1] = ptr[1];
tmp[i][2] = ’¥0’;
ptr += 3;
}
for( i = 0; i < 6; i++ ){
printf(”%s¥n”, tmp[i]);
}
return 0;
}
1.
char a = ’a’;
short i = 0;
i = (short)a;
2.
char address[] = ”AA:BB:CC:DD:EE:FF”;
http://www.hatena.ne.jp/1103251340#
人力検索はてな - C言語の質問です(C言語初心者なのでわかりやすくお願いします) 1.文字列型をshort型に変換する方法 2.MACアドレス文字列(AA:BB:CC:DD:EE:FF)をchar型の配列に格納する方..
1.
short a;
char test[]=”1234”;
a=atoi(test); /* stdlib.hをincludeすること 文字列を数値に変換します*/
2.
int i;
char MAC[256]=”AA:23:4e:58:69:02”;
char mac2[6][3];
for(i=0;i<6;i++){
//数値の先頭のポインタ取得(3字ごとにあるので0,3,6,9,12,15文字目が該当)で2も事実コピー
strncpy(mac2[i],MAC+i*3,2);
mac2[i][2]=0;
// WINAPIだと終端を0にしてくれないので
// mac2[i][0]=MAC[i*3];
// mac2[i][1]=MAC[i*3+1];
// mac2[i][2]=0;
//と同じ
}
3.おまけMACアドレスをINT型配列に格納
for(i=0;i<6;i++){
//1文字目(3字ごとにあるので0,3,6,9,12,15文字目が該当)
j=(MAC[i*3]|’ ’)-’0’;
//2文字目(3字ごとにあるので1,4,7,10,13,16文字目が該当)
// |’ ’してるのは大文字があった場合小文字に変換するため
k=(MAC[i*3+1]|’ ’)-’0’;
//abcdefだった場合 10,11,12,13,14,15に変換する
if(j>10)j-=0x27;
if(k>10)k-=0x27;
//1文字目を16倍して2文字目の数値と足し算
mac[i]=(j<<4)+k;
}
こんな感じです
1番目の回答はatoiですね。shortなのでintでもいいのか自信がなかったのですが。
2番目は思ったより難しいのですね。勉強になりました。char mac2[6][3]となってますが、char mac2[6]の場合、格納することは可能でしょうか?
ありがとうございます。助かりました!
http://www.paw.hi-ho.ne.jp/takadayouhei/technic/47.html
atoi 〜文字列を整数に変換する〜
1の方法はここに書いてあるようにatoiを使ってint型にしたものをshortにキャストすればできます。
char *a;/* 数字の文字列 */
short i = (short)atoi(a);
というかんじ。
http://www.geocities.jp/ky_webid/c/044.html
C言語編 第44章 型変換関数
2の質問についてはMAC文字列のような固定したフォーマットならsscanfが一番楽かと思います。
char *a = ”AA:BB:CC:DD:EE:FF”;
char mac[6];
sscanf(a, ”%s:%s:%s:%s:%s:%s”,&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]);
1番目:やはりatoiでよさそうですね。自信がもてました。ありがとうございます。
2番目:ちょっと目から鱗でした。勉強になりました。ありがとうございます!
すいません例を挙げておけば良かったですね。
1番目のは一文字ですが文字列なので”123”でも可能なのですか?
2番目のは「AA」「BB」ごとに配列に格納したいのですが。