• ベストアンサー

10進数を16進数に変換

c言語で文字列に含まれる10進数部分を16進数に変換する方法を教えてください。  sdkk161h→sdkkA1h 161 →  A1

  • ratei
  • お礼率88% (8/9)

質問者が選んだベストアンサー

  • ベストアンサー
  • Rossana
  • ベストアンサー率33% (131/394)
回答No.1

文字と数字を分けて%xで出力すればいいのでは. 例;printf("%x", a);

ratei
質問者

お礼

ありがとうどざいます。なんとかうごきました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

とりあえず、作ってみました。 #include <stdio.h> #define ON 1 #define OFF 0 char *conv(char *buff,const char *str){ char *po; const char *pi; int numFlag=0,c; unsigned hex=0; for(po=buff,pi=str;*pi;pi++){ if('0' <= *pi && *pi <= '9'){ numFlag=ON; hex=hex*10+(*pi-'0'); } else { if(numFlag==ON){ c=sprintf(po,"%X",hex); po+=c; numFlag=OFF; hex=0; } *po++=*pi; } } *po='\0'; return(buff); } void main(void){ char buff[80]; printf("%s\n",conv(buff,"sdkk161h")); }

ratei
質問者

お礼

すいません。まだ初心者でポインタならってないんです。これから参考にします。ありがとうございます。

関連するQ&A

  • C言語で16進数文字列から16進数数値への変換

    C言語で、16進数文字列を16進数に変換したいのですが解りません! 教えていただけないでしょうか?

  • 3進数を10進数に変換

    3進数や5進数のように2の階乗ではない任意の進数の文字列を、C言語のビットシフトを使って10進数に変換するプログラムについて、質問させていただきます。 ビットシフトを使わないで、任意の進数の文字列を10進数に変換する方法は分かっていますが、ビットシフトを使った方が非常に計算が高速で出来るので、ビットシフトを使いたいと思っています。 下記のプログラムは4進文字列を10進整数に変換するものです。2進、8進文字列の場合は、シフトするビット数を1ビット、3ビット(つまり、ans <<= 1、ans <<= 3)にすれば計算することが可能です。しかし、3進数や5進数の場合、いろいろと考えたのですが、どのようにすれば良いのか分かりません。 下記のプログラムのようにビットシフトを使って3進数や5進数の文字列を10進数に変換するには、どのように工夫すれば良いでしょうか? どなたかご教授をお願いいたします。 #define STRING_NUM 2 /* 文字列の長さ */ int main(void) { int i; int ans = 0; /* 10進数の整数 */ char buf[STRING_NUM]; /* 4進数の文字列 */ buf[0] = '3'; buf[1] = '1'; for ( i = 0 ; i < STRING_NUM; i++ ){ printf(" %c", buf[i]); } printf("\n"); for ( i = 0 ; i < STRING_NUM; i++ ){ if ( buf[i] == '0' ){ ans <<= 2; /* シフトするビット数 */ ans |= 0; } if ( buf[i] == '1' ){ ans <<= 2; ans |= 1; } if ( buf[i] == '2' ){ ans <<= 2; ans |= 2; } if ( buf[i] == '3' ){ ans <<= 2; ans |= 3; } } printf( "ans = %d\n", ans ); return 0; }

  • 文字列を大文字の2桁ごとのコンマ付き16進数に変換する方法

    文字列を大文字の2桁ごとのコンマ付き16進数に変換する方法がわかりません。ただ単に文字列を16進数に変更するだけならbin2hex()でできますけど、誰か知っている方はいませんか?具体的には、変換された文字列が1a2b3c4d5e6fなら、1A.2B.3C.4D.5E.6Fと変換したいんです。どうすればいいですか?

    • ベストアンサー
    • PHP
  • 16進数から2進数への変換

    「Aレジスタに一文字のアスキーコードがあり、これを以下のように二進数に変換してBレジスタに代入する」 Aレジスタ='0’のとき、Bレジスタ=00000000B Aレジスタ='A’のとき、Bレジスタ=00001010B この例題に苦戦してます。。 16進数を2進数に変換するアセンブリ言語を教えてください!!

  • Shift_JIS(16進)を文字に変換する方法

     お世話になります。  現在、文字コードを文字に変換するプログラムを組んでいるのですが、Shift_JIS(16進)を文字に変換する方法が分からず困っています。  具体的には、"82a0 "という文字列を持っていて、それを「あ」という文字に変換するといった感じなのですが・・・。C言語でこれは可能なのでしょうか?可能なのだとしたらどういった手順で行えばよろしいのでしょう。  因みにC++ではなくC言語です。  よろしくお願いします。

  • ファイルパスの変換方法

    C言語で a:/home/sub/file.c→a:\home\sub\file.c へ文字列を変換する方法を教えてください。

  • 16進数変換

    文字列16進数をバイナリ16進数に変換する参考ソースが以下のようになっていたのですが、どういう意味でしょうか? strSerial ..... 文字列16進数 ForwardBuf ..... char BackBuf .....char /* 文字列16進数長を代入 */ Len_strSerial = strlen(strSerial); /* 文字列16進数を大文字に変換 */ for (iToupCnt=0; iToupCnt < Len_strSerial; iToupCnt++) { tmpbuf[iToupCnt] = toupper(strSerial[iToupCnt]); } for (iStrsCnt = 0; iStrsCnt < Len_strSerial; iStrsCnt += 2) { ForwardBuf = (tmpbuf[iStrsCnt] >= 'A' ? tmpbuf[iStrsCnt] - 'A' + 10 : tmpbuf[iStrsCnt] - '0'); BackBuf = (tmpbuf[iStrsCnt + 1] >= 'A' ? tmpbuf[iStrsCnt + 1] - 'A' + 10 : tmpbuf[iStrsCnt + 1] - '0'); binSerial[iBSLCnt] = ForwardBuf * 16 + BackBuf; iBSLCnt++; } ちょっと見にくいですね・・・すみません よろしくお願いします ちなみに最終的にはバイナリ16進数とバイナリ16進数長が 求められるようです。

  • 10進数の2進数文字列変換

    10進数の2進数文字列変換 ◆開発環境 OS:Linux(Ubuntu9.10) コンパイラ:gcc4.4 言語:C ◆質問内容 ポインタ*Aに格納されている10進数を2進数の文字列に変換し、 文字配列Bに格納したい。 バッファとして*fpを準備。 webで調査した結果を以下のソースのようにアレンジしましたが、 fputc関数の処理で、プログラムが強制終了してしまいます。 何か、良い方法ございませんでしょうか。 ◆サンプルソース void Dec_conv_bit(long *A,char *B){ unsigned int bit,n; //ビット比較用 unsigned int *fp = &n; n = (unsigned int)A; for(bit = 1 << sizeof(int)*8-1; bit > 0; bit >>= 1){ fputc((n & bit)?'1':'0',fp); } sprintf(B,"%s",fp); //putchar('\n'); }

  • 16進数の文字列を文章に変える

    プログラミングに関しては全く分からない者です。 先日、とある文字列が友人から送られてきました。 0から9までの数字とaからfのアルファベットで構成されているので、16進数の暗号なのかと検討をつけました。 ネットで「16進数 文字列 変換」などと検索して、変換ツールなどを試してみたのですが、うまく変換されません。 Excelあたりを使って、どうにか解読する方法はありませんか? また、そういった文字列というのは、プログラミング言語や文字コードによって、同じ文章でも変わってしまうものなのでしょうか? よろしくお願いします。

  • 2進数から10進数へ変換

    C言語で、2進数から10進数に変換するプログラムを作ろうと思っています。 手計算で行う場合は2進数の 下1桁目×1 下2桁目×2 下3桁目×4。。。と計算しています。 下○桁目を取り出す方法を考えているのですが、思いつきません。 3桁の2進数を変換するプログラム(とりあえず101を変換することを考えて・・・)を書いてみたのですが、101を考えすぎたためか上手くいきませんでした。 最終的には10進数でintの範囲内程度の2進数の変換ができるプログラムを書きたいと思っています。 アドバイスをお願いします。 ちなみに、考えてみたプログラムは以下の通りです。 101以外で上手く変換できませんね・・・ ここに貼り付けるのが恥ずかしいです。 #include <stdio.h> main() { int x ,i ,z[3]; scanf("%d",&x); z[0]=x/100*4; z[1]=(x/10-10)*2; z[2]=(x-110)*1; printf("%d",z[0]+z[1]+z[2]); return 0; }

専門家に質問してみよう