バイナリを繋げる

解決


まんたろう  2003-12-20 22:27:19  No: 52932

はじめて質問させていただきます。
int型のdata1にバイナリのAB、
int型のdata2にバイナリのCD、が
入っているものとして、それを
int型のdata3にAB CD、とするには
どのようにしたらいいのでしょうか?
VBですと、data3 = data1 & data2とすれば
いいのですが、C言語の場合はどうすればいいのか
わかりません。
よろしくお願いいたします。
開発環境はVB6.0をwin2000で使用しております。


岡田 之仁  2003-12-21 01:39:48  No: 52933

意味がよく解らないのですが・・・

多分、0xAB と、0xCD の各値を、最終的に、0xABCD と言う数値表現
にしたいのでしょうか・・・int型とありますので・・・

であれば、 data3 = data1 * 256 + data2

ですが・・・
文字としてなのかよく解らないので・・・

以上。


まんたろう  2003-12-21 04:47:08  No: 52934

岡田 之仁様、
早速の返信ありがとうございます。
「Visual Basic Q & A 掲示板」の方では
よくそのお名前を拝見しておりました。

まず訂正ですが、当方の開発環境は
VC6.0をwin2000で使用しております。
失礼しました。

質問についてですが、
岡田様がおっしゃる通り、0xAB と 0xCD を
0xABCDとしたかったものです。
data3 = data1 * 256 + data2 とすることで、
期待する結果が得られました。
ありがとうございました。
ただ、一つわからないのが、
「*256」というのは何を意味しているのでしょうか?
何故、data1に対してのみ「*256」としているのかがわかりません。
data3 = data1 + data2 * 256 とすると 0xCDBA となるのもわかりません。
よろしくお願いいたします。


シャノン  2003-12-21 08:32:26  No: 52935

0xABCD = 0xAB00 + 0xCD です。

ところで、32 * 100 = 3200 ですね(別に 32 に意味はないです)。
100 をかけると2桁ズレました。

これは 16 進数でも同じです。
で、10進数での 256 は 16進数では 0x100 なのです。

つまり、0xAB * 0x100 = 0xAB00
最初の式は 0xABCD = 0xAB * 0x100 + 0xCD になります。
0x100 を 256 に戻してやって、それぞれの値を変数名を使って表せば

data3 = data1 * 256 + data2

になるわけです。よろしいでしょうか?


まんたろう  2003-12-21 11:58:33  No: 52936

シャノン様、
丁寧なご返答ありがとうございます。
2桁ずらすために「*256」としていたのですね。
よくわかりました。
プログラミングをするようになって、
「255」=「0xFF」という関連は頭の中ですぐに
できるようになっていたのですが、
「256」=「0x100」というのは、思いつきませんでした。
まだまだ訓練が足りないみたいです。

どうもありがとうございました。


R  2003-12-21 18:55:17  No: 52937

Cの場合こっちの方が一般的かも

data3 = (data1 << 8) | data2;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加