データ変換 – プログラミング – Home

通知
すべてクリア

データ変換


だめだめ
 だめだめ
(@だめだめ)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

Hexの変換をおこなっているのですが、
まず  データを
char buf[];
char data[] = 1;
sprintf (buf ,%x , DATA);
この時、bufに31とデータを取得します。
その後、bufの31から整数 1を取得したいのですが
この場合の変換方法を教えて下さい。
よろしくお願いします。


引用解決済
トピックタグ
TAKA
 TAKA
(@TAKA)
ゲスト
結合: 23年前
投稿: 117
 

一桁だけなら単純に
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;
}
}
でできるはず。
かんがえればいろいろ方法あるはずですね。


返信引用
EIJI
 EIJI
(@EIJI)
ゲスト
結合: 24年前
投稿: 76
 

buf[i+1]が'a'から'f'の場合は、「- '0'」ではなくて、「- 'W'」になりますね。


返信引用
TAKA
 TAKA
(@TAKA)
ゲスト
結合: 23年前
投稿: 117
 

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;
}
}
でできるはず。
かんがえればいろいろ方法あるはずですね。


返信引用
TAKA
 TAKA
(@TAKA)
ゲスト
結合: 23年前
投稿: 117
 

あれれ、初め数値だから'A'-'F'はないですね。
よって初めのでいいはずです。
一つ前の意見は読まないで下さい。
しかもまちがっているので・・・。
'A'や'a'だとHEXは'3X'ではないため
使えません。
よって破棄です。


返信引用
EIJI
 EIJI
(@EIJI)
ゲスト
結合: 24年前
投稿: 76
 

私の勘違いでした。ごめんなさい。(陳謝)
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');
}
}

実際に使うときは桁あふれとかに注意してください。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました