• ベストアンサー

C言語の配列の扱い

次のような配列bufと変数dataを宣言して bufの中身をdataにコピーしたいのですが、 buf[0]のみで、buf[1]の値が入りません。 具体的には、buf[0]には16進数で0x3f、 buf[1]には0x3aが入っていて、 dataの値を0x3a3fにしたいのです。 教えてください。 ***************************** unsigned char buf[2]; unsigned short data; data = (unsigned short)*buf; *****************************

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

  • ベストアンサー
回答No.1

data = *(unsigned short*)buf; ではいかがでしょう。

peroncho
質問者

お礼

早速のご回答ありがとうございました。 無事解決して大変助かりました。<(_ _)>

その他の回答 (1)

noname#15691
noname#15691
回答No.2

CPUのエンディアンが違っても質問通りにしたいなら、 data = ((unsigned short)buf[1] << 8) | buf[0]; こうですかね。

peroncho
質問者

お礼

ご回答いただきありがとうございます。 参考にさせていただきます。

関連するQ&A

  • C言語でunsigned char配列を連結する方法ってありますか?

    C言語でunsigned char配列を連結する方法ってありますか? 例えば unsigned char test[]={0x00,0x02,0x03}; unsigned char test2[]={0x05,0x06}; という配列があったとして test[]という配列のあとにtest2の配列を追加することは可能でしょうか? {0x00,0x02,0x03,0x05,0x06}という配列になればOKです。 よろしくお願いします。

  • C言語の配列の要素番号を得る

    例えば、 union ary_tag{ unsigned char byte[23]; struct { unsigned char aa; unsigned char bb; unsigned char cc; unsigned char dd; unsigned char ee; 途中省略 unsigned char xx; unsigned char yy; unsigned char zz; }a_z; } union ary_tag ary; とした場合、ary.a_z.xxは、配列で言うと何番目になるかを取得したいです。 number = &ary.a_z.xx - &ary.a_z.aa として算出しました。 他にやり方はあるのでしょうか?

  • C言語、配列の積

    整数型二次元配列x,yに適当な値をキーボードから入力し、次にそれらの行列の積を計算して二次元配列zに代入し、行列x,y,zの要素を出力せよ。但し、配列の大きさは最初にキーボードから入力しておき、変数宣言においては、配列の大きさを大きめに宣言しておき、キーボードから入力する配列の大きさはその範囲内で入力するようにせよ。 という問題です。よろしくお願いいたします

  • 配列変数のアドレス

    C言語で、配列を宣言した場合、 char a[] = "hoge"; 変数aは初期化された配列の先頭番地を指しているのですが、この時、 変数aの中身も変数aのアドレス(&a)ともに上記の配列の先頭番地になっているようなのですが、 これによって、配列の変数aは読み取り専用で、書き換えられないということにしていると思っていいのでしょうか? ちなみに、 char *p = "fuga"; とした場合は、pと&pのアドレスは異なって、pの中身は書き換えられます。

  • 配列の配列をmemcpyやmemcmpしたいです

    【環境】WindowsXP(SP2)、VisualStudio2005++(MFC) タイトルの通りなんですが、配列の配列を比較したりコピーしたいのですが、以下に質問を3つ記載させていただきますので、どなたかご教授お願いいたしますm(__)m 1.宣言と初期化について char **buf; buf = new char*[3200]; for(int i=0; i < 3200; i++) { buf[i] = new char[4]; } これで、buf[1]、buf[2]、buf[3]、buf[4]に、それぞれ3200のchar型の配列が宣言された事になりますでしょうか? ※buf[4][3200] なのか buf[3200][4]なのかよく分からないです。 2.上記の方法で定義した2つの配列(bufとtmp)の比較 for(int i =0; i < 4; i++) { memcmp (buf[i], tmp[i], sizeof(tmp[i])); } これで比較出来ますでしょうか? 3.上記の方法で定義した2つの配列(bufとtmp)のコピー for(int i =0; i < 4; i++) { memcpy_s(buf[i], sizeof(buf[i]), tmp[i], 3200 * sizeof(char)); } これではバッファオーバーランエラーが発生してしまうのですが、どこがおかしいでしょうか? 以上3点、初心者の質問なので意味が分からないような箇所があるとは思いますが、どうかご教授お願いいたしますm(__)m  

  • C言語の配列について

    short* dst_buf = new short[dst_img->width * dst_img->height]; double *a = dst_buf[dst_img->width * jj + ii]; if(*a == 1.0){white++;} というプログラムをくんでいます。 dst_bufの中身をaに入れるというものです。 すると、エラーで 2tika06.exe の 0x00b3627d でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x07943db8 を読み込み中にアクセス違反が発生しました。 というものが出てくるのですがなぜでしょうか。 解決策がわかりません。 初歩的な質問ですが、よろしくお願いします。

  • c言語の問題です。解説と解答をお願いします

    (1) doube a[3][4]で宣言された2次元配列の要素a[y][x]に割り当てられるメモリのアドレス&a[y][x]を数式で表せ。x∈{0,1,2,3},y∈{0,1,2}である。 (2) 下記の宣言文によって複数個の配列要素に初期値を代入した。各配列要素に代入される値を説明しなさい。 char b[]={‘X’,’Y’,’Z’}; char c[]=“xyz”; char *d[]={“ONE”,”TWO”,”THREE”}; int e[3][2]={1,3,5,7,9,11}; お願いします。

  • 配列へのプラス?

    C++のコードを読んでいるところなのですが、 配列に プラスされているコード部の意味がわからずこまっております。 ********************************* unsigned char data1[32]; unsigned char data2[8]; ※ここでdata1, data2に値入力処理 if(memcmp(data1 + 2, data2, 8) != 0){  //処理X } ********************************* 上記のようなコードの「data1 + 2」の部分がよくわかりません。 byte配列にプラスされている2は、数値なのでしょうか?? C++は普段使わないもので、、、呆れるほどアホな質問だとしてもご了承ください。。 どなたかご教授ねがいます。 よろしくお願いいたします。

  • 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を使用しないで実現させたいです。 難しいかもしれませんがお願いします。 なんだか説明が下手ですみません。 お願いいたします。

  • 配列とポインタについて

    #include <stdio.h> int main() { char x[3]; char *y; x[0]='a'; x[1]='b'; x[2]='\0'; y="abc"; printf("xの値は%s\n",x); printf("yの値は%s\n",y); } 通常の配列宣言では、このままだと文字列をまとめて 代入できないのに対して、ポインタ変数ならまとめて代入することができるのは何故ですか?そういう仕組みだと言われてしまえば、それまでなんですが・・・

専門家に質問してみよう