C言語で配列rbufのデータをHEXに移動する方法

このQ&Aのポイント
  • C言語で配列rbufに格納されているデータを16進数に変換して、配列HEXに順番に格納する方法を教えてください。
  • C言語超初心者ですが、配列rbufに入っているテキストデータを16進数に変換し、配列HEXに順番に格納したいです。
  • どうすれば配列rbufのデータを16進数に変換してHEXに格納することができるのでしょうか?
回答を見る
  • ベストアンサー

C言語において、以下の条件下で、配列rbufに格納されているデータを配

C言語において、以下の条件下で、配列rbufに格納されているデータを配列HEXに移動する方法を教えてください。 なお、C言語超初心者ですので、意味不明なことを書いてしまう可能性もありますが、宜しくお願いします。 まず、配列に関しては、 char rbuf[256]; char HEX[256]; と定義されているとします。 そして rbuf にはテキストデータが入っているものとします。 このrbufに入っているテキストデータを、16進数に変換して順番にHEXに格納したいのです。 (rbuf[1]に入っているデータを16進変換してHEX[1]に、 rbuf[2]に入っているデータを16進変換してHEX[2]に……という具合に。) お分かり頂けましたでしょうか? ちなみに以下のようなことを試してみましたがダメでした。 for(i=0;i < sign;++i){ sprintf(HEX,"%02X",rbuf[i]); } ※(signにはrbufに格納されているデータ数が入っています。) 当たり前ですが、上のように書くと、HEXは次々と上書きされ、 一番最後のデータしか入りません。 かといって次のように書くと、文法的に間違っているようでコンパイルエラーになります。 for(i=0;i < sign;++i){ sprintf(HEX[i],"%02X",rbuf[i]); } どうすればよろしいのでしょうか?

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

その他の回答 (1)

  • necomimi
  • ベストアンサー率41% (633/1540)
回答No.1

何がしたいのかわかりません 具体的にrbufにどんなテキストが入ってるんでしょう? 質問カテゴリはプログラム言語(C言語)の方が適切かも

関連するQ&A

  • C言語のコンパイル時に表示される以下のエラーの意味を教えて下さい。

    C言語のコンパイル時に表示される以下のエラーの意味を教えて下さい。 また、できれば解決方法も教えて下さい。 「パラメータ '__buffer' は signed char * 型として定義されているので int は渡せない」 このエラーの該当箇所は、以下のsprintf文です。 for(i = 0 ;i < sign; ++i){  sprintf(HEXDATA[i],"%02X",rbuf[i]); ← このステップです } なお、HEXDATA、rbuf、i、signは、  char HEXDATA[256];  char rbuf[256];  int i,sign; と定義しています。 rbufには入力ファイルから読み込んだテキストデータ「0123456」が入っており、 これを1文字ずつ16進数に変換して、順にHEXDATA[1]、HEXDATA[2]、HEXDATA[3]~~~ に格納していきたいのですが、どうしたら良いのでしょうか。

  • C言語において、以下の条件で、ファイルに保存されているテキストデータを

    C言語において、以下の条件で、ファイルに保存されているテキストデータを構造体に格納する方法を教えて下さい。 例題として、テキストファイルに保存されている社員データを構造体に格納するものとします。 初心者なので、記述内容が充分か分かりませんが、宜しくお願いします。 ---以下条件--- ・入力ファイルはテキスト形式(.txt)とし、ファイル名は「memberlist」とします。 ・ファイル(memberlist)には、社員1人につき、社員番号、名前、名前(ヨミガナ)が、「,」で区切られて存在するものとします。 また、、テキストファイルには一行につき社員1人のデータが存在するものとし、複数の社員データが同一行に存在することはありません。 テキストファイルの例). 10001,山田太郎,ヤマダタロウ, 10002,佐藤一郎,サトウイチロウ, 30010,池田悟,イケダサトル, ……………… ………………(続く) ・構造体は以下のように定義されているものとします。 なお、テキストファイルに何件の社員データがあるかは定義しませんが、 構造体の数は充分に確保されているものとします。 struct Person { int num;      /*社員番号*/ char name[10]; /*名前*/ char kana[20];  /*名前(ヨミガナ)*/ }; struct Person List[100]; 上記の条件のもとでテキストファイルの内容を構造体に格納したいのです。 そこで以下のようなプログラムを作ってみましたが、エラーが発生してしまいます(後述)。 #include<stdio.h> /***構造体定義***/ struct Person { int num;      /*社員番号*/ char name[10]; /*名前*/ char kana[20];  /*名前(ヨミガナ)*/ }; struct Person List[100]; main() /***変数の定義***/ FILE *rfp char rbuf[256]; char *tp; int i,size; /***ファイルオープン***/ rfp = fopen("memberlist.txt","r");   /*エラー処理省略(ファイルオープンは正常に終了したものとします)*/ /***構造体への格納処理***/ while(1){ size = fgets(rbuf,256,rfp);    /*テキストデータを一行取得*/   tp = strtok(rbuf,",");       /*テキストデータをカンマで区切る*/   sprintf(List[i].num,"%05d",tp); /*文字列を数値に変換し、社員番号を構造体へ*/   tp = strtok(NULL,",");      /*テキストデータをカンマで区切る*/   strcpy(List[i].name,tp);     /*名前を構造体へ*/   tp = strtok(NULL,",");      /*テキストデータをカンマで区切る*/   strcpy(List[i].kana,tp);      /*ヨミガナを構造体へ*/  if(size == NULL){   break;                 /*データを読み終えたら、ループを離脱*/  } } 上記のプログラムのエラー内容ですが、 まず、社員番号を文字列変換し格納するsprintf文で、 「パラメータ '__buffer' は signed char * 型として定義されているので int は渡せない(関数 main )」 というコンパイルエラーが発生します。 また、実行すると、Windowsからのエラー、「問題が発生したため、”プログラム名”を終了します。~~~」というプログラムが強制終了される時に出現するエラーが発生します。 可能性としてどのような問題が考えられますか?よろしくお願いします。

  • c言語 int型の数字をchar型の配列に

    c言語についてです。 int型の数字をchar型の配列に入れたいです。 関数に対してint型の数字を文字列として渡し、 関数内でchar型の配列に格納したいです。 例として、 a(char a[]){  ~~  ~~ } int main(void){ int x = 5678;  ~~  a(x); } とできるようにしたいです。 しかしこれだと5678という値がそのままchar型の一つの配列に入る?ため正しくないです。 欲しい結果としてはちゃんとa関数内で、 a[1] = '5' a[2] = '6' a[3] = '7' a[4] = '8' となってほしいです。 もともと渡す値が”5678”となっていれば結果は正しく出るのですが、 渡す値がint型と決まっているためどうにかして5678を”5678”とすればいいのではないかと考えています。 つまり5678を単純に文字列に変換すればいいのでしょうか? またプログラム内ではsprintfやatolを使用しないで実現させたいです。 難しいかもしれませんがお願いします。 なんだか説明が下手ですみません。 お願いいたします。

  • 独学で最近c言語を始めたものです。10進数を16進数に変換するプログラ

    独学で最近c言語を始めたものです。10進数を16進数に変換するプログラムを作りました。 しかしコンパイルしてもエラーは出ないのですがprintfの部分で配列の結果のみが出ません。 如何せん、独学ですので気付かないところで簡単なミスをしているかもしれませんが、分かる方がいましたご教授ください。 #include<stdio.h> int main() { static char data[16]= {'1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char hex[5]; short dec,num,i; for(;;){ for(i=0;i<=3;i++) hex[i]=' '; hex[4]='\0'; printf("10進数を入力してください。>>"); scanf("%d",&dec); if(dec==0) break; for(i=3;dec!=0;i--){ num=dec%16; dec/=16; hex[i]=data[num]; } printf("16進数は%sです\n",hex); } }

  • C言語を使って、ファイルの読み込みをして切り出して2次元配列に格納した

    C言語を使って、ファイルの読み込みをして切り出して2次元配列に格納したいのです。 1,2行目に配列の行の数と列の数が書かれ、3行目から改行とカンマ、スペースで区切られて配列が書かれているテキストを読み込んで2次元配列に格納する。 テキストの例) 4 3 1.1 1.2 1.3 1.4 1.5 2.1 2.2 2.3 2.4 2.5 3.1 3.2 3.3 4.4 3.5 というプログラムを書いています。色々と参考書やサイトを参考してとりあえずの形にはなったと思ったのですが、実行してもエラーが出ます。 どこまで動いているか調べたところ、一行ごとに読み出してそれを切り出して行くところでおかしな事をしてしまっているようですが、どう変えたらいいものか分かりません。 なので、その点のアドバイスと 大きさの分からないファイルから1,2行目を読み出すのはこれで変な動きをする恐れはないか の2点についてヒントでも構わないので、教えてください。 以下、書いたソースです(申し訳ないのですが、文字数の関係で一部省略しています。) #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[] ) { double ** mainhairetu; int size_x, size_y; /* size_x 行 size_y 列 */ int i,j,count=0,count2; int *cut,*temp2; double temp; char s2[] = " ,"; char gyou[10],*num; FILE *fil; while((fgets(gyou,10,fil)) !=NULL){ if(count == 0){ size_x=atoi(gyou); count++; }else if(count ==1){ size_y=atoi(gyou); count=count+1; }else{ break; } } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ここでmallocを使ってcutとmainhairetuの2つの配列を作っています。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ count=0; for (i = 0; i < size_y+2; i++) { mainhairetu[i][0] = atof( strtok( fgets(cut,50,fil),s2 ) ); for (j = 1; j < size_x; j++){ if(count <=1){ count++; break; }else{ mainhairetu[i][j] = atof( strtok( NULL,s2 ) ); } } } for(i=0;i<size_y;i++){ for(j=0;j<size_y;j++){ printf("%f",mainhairetu[i][j]); } printf("\n"); } return(0); }

  • C言語 文字列格納

    テキストファイルから整数データ又は文字列を読み込んで配列に格納する動作についての質問です。 テキストファイルが1行区切りの整数型なら1次元配列で for(i = 0; i < maxSize; i++) { fscanf(fp,"%d", &data[i]); } テキストファイルが1行区切りの文字列なら2次元配列で for(i = 0; i < MAXSIZE; i++) { if (fscanf(fp,"%s", &data[i][300]) == EOF) break; } for(j = 0; j < i; j++) printf("%s\n", data[j]); みたいな具合に格納できたんですが、 テキストファイルが1行区切りのデータではなく、空白文字区切りの文字データだった場合、それぞれどのようにして配列に格納すればいいかがわかりません。 イメージとしては、1文字目から見ていって空白が出ればそこで切って格納していくというかんじなのですが・・・ 質問の内容がわかりにくいかもしれませんが、是非教えてください。お願いします。

  • c言語 配列 返り値

    0~255の数を2進数に変換し、各8ビットずつに格納するというを作りたいのですが、 以下のような場合、reutrnで配列を返すにはどうしたらよいのですか? int bina(int r2,int g2,int b2){ int i; char binary[23]={0}; for(i=0;b2>0;i++){//2進数に変換する binary[i]=b2%2; b2=b2/2; } for(i=8;g2>0;i++){ binary[i]=g2%2; g2=g2/2; } for(i=16;r2>0;i++){ binary[i]=r2%2; r2=r2/2; } printf(" 2進数 = "); for(i=0;i<24;i++){ printf("%d", binary[23-i]); } printf("\n"); return binary[23]; } int main(void) { r=124,g=235,b=30 char sStr1[23]; sStr1[23]=bina(r,g,b); for(i=0;i<24;i++){ printf("%d"sStr1[i]); } return(0); }

  • c言語の全角文字を配列に格納について

    C言語を使ってchar配列に漢字を格納したいです。東海道新幹線の18駅を一駅ずつ漢字で格納したいと考えています。しかし、情報量が多いので格納がうまくいきません。漢字で格納する方法があれば教えていただきたいです。お願いします。

  • C#で、ファイルのデータを取得し、配列に格納

    C#を始めたばかりで分からないことも多いため、質問させていただきます。 C#で、テキストファイルにある2進数の数値 例: 00111100 11111100 00010100 のような8桁のデータをC#でテキストファイルから2進数のまま読み取り、 配列に格納したいです。 上の例で考えると、 byte[0]に 00111100 byte[1]に 11111100 byte[2]に 00010100  のデータが入力されているような感じです。 ArrayListを使用する方法や、 バイナリファイルで読み込む方法などもあると思うのですが、 データを1行ごとに配列に入力し、 それを見た目どおり2進数として格納する方法が分かりません。 やはり、文字コードなどを参考に、 1文字ずつ格納し、引き算していくしか方法はないのでしょうか? 文章が分かりにくくて申し訳ないのですが、回答いただけるとありがたいです! よろしくお願いいたします。

  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。