Hexの変換をおこなっているのですが、
まず データを
char buf[];
char data[] = 1;
sprintf (buf ,%x , DATA);
この時、bufに31とデータを取得します。
その後、bufの31から整数 1を取得したいのですが
この場合の変換方法を教えて下さい。
よろしくお願いします。
一桁だけなら単純に
if (buf[0] == '3') {
kekka = (int)(buf[1] - '0');
}
でできます。
また、もっと桁があるなら
keta = 1;
for( i = 0; i < strlen(buf); i+=2) {
if (buf[i] == '3') {
kekka = (int)(buf[i+1] - '0') * keta;
keta *= 10;
}
}
でできるはず。
かんがえればいろいろ方法あるはずですね。
buf[i+1]が'a'から'f'の場合は、「- '0'」ではなくて、「- 'W'」になりますね。
EIJIさんの意見で気づいて前文訂正です。
HEXでしたね・・
一桁だけなら単純に
if (buf[0] == '3') {
if (buf[1] >= '0' && buf[1] <= '9') {
kekka = (int)(buf[1] - '0');
}
else if (buf[1] >= 'A' && buf[1] <= 'F') {
wk = 10;
wk += (int)(buf[1] - 'A');
kekka = wk;
}
else if (buf[1] >= 'a' && buf[1] <= 'f') {
wk = 10;
wk += (int)(buf[1] - 'a');
kekka = wk;
}
else {
// エラーです
}
}
でできます。
また、もっと桁があるなら
keta = 1;
for( i = strlen(buf) - 1; i > 0 i-=2) {
if (buf[i-1] == '3') {
if (buf[i] >= '0' && buf[i] <= '9') {
wk = (int)(buf[i] - '0');
}
else if (buf[i] >= 'A' && buf[i] <= 'F') {
wk = 10;
wk += (int)(buf[i] - 'A');
}
else if (buf[i] >= 'a' && buf[i] <= 'f') {
wk = 10;
wk += (int)(buf[i] - 'a');
}
else {
break;
// エラーです
}
wk *= keta;
kekka += wk;
keta *= 16;
}
}
でできるはず。
かんがえればいろいろ方法あるはずですね。
あれれ、初め数値だから'A'-'F'はないですね。
よって初めのでいいはずです。
一つ前の意見は読まないで下さい。
しかもまちがっているので・・・。
'A'や'a'だとHEXは'3X'ではないため
使えません。
よって破棄です。
私の勘違いでした。ごめんなさい。(陳謝)
31 => 1 変換でしたね。
3132333435 => 12345 変換するコードを実際に試してみました。
kekka = 0;
for( i = 0; i < strlen(buf); i+=2) {
if (buf[i] == '3') {
kekka = kekka * 10 + (int)(buf[i+1] - '0');
}
}
実際に使うときは桁あふれとかに注意してください。