LANを経由してデータを転送したいと思います。
転送したいデータ(変数)は、一旦byte型に変換する必要があります。
ここで、8桁の10進数、最大で99999999の数値を送信しなければなりません。
今考えているのは、
101111101011110000011111111(99999999)
を
0000 0101(5),1111 0101(245),1110 0000(224),1111 1111(255)
のbyte列に分解して送信、受信側でビットシフトで復元するものです。
このとき、2進数を4つに分解しなければなりませんが、どのように
プログラムするのが妥当でしょうか。
余談ですが、実際に転送したい変数にはfloat型、double型の変数ですが
これらは整数部と小数部に分離し、それぞれint型にキャスト済みです。
ご教示のほど宜しくお願い致します。
変数のbyte型への変換手順
-
ぽんた
Re: 変数のbyte型への変換手順
記載忘れのため追記ですが、対象はC言語です。
ひとつ思いついている解決策は、
1111ビットマスクを4つ用意して右ビットシフトでbyte型
まで降ろしてきて取り出す方法です。
ひとつ思いついている解決策は、
1111ビットマスクを4つ用意して右ビットシフトでbyte型
まで降ろしてきて取り出す方法です。
-
ぽんた
Re: 変数のbyte型への変換手順
beatleさん、早速のご回答ありがとうございます。
32bitの変数に代入して8bit配列で取り出すだけで処理が
完了するんですね。
基本に忠実にやれば破綻しないだろう・・・と知ってる知識だけでやっていましたが
結果的には回りくどいことをしていました。
ずっと考えていたプロセスがたった2行で済むなんて。。。
これでだいぶ前進しそうです。ありがとうございました。
32bitの変数に代入して8bit配列で取り出すだけで処理が
完了するんですね。
基本に忠実にやれば破綻しないだろう・・・と知ってる知識だけでやっていましたが
結果的には回りくどいことをしていました。
ずっと考えていたプロセスがたった2行で済むなんて。。。
これでだいぶ前進しそうです。ありがとうございました。
Re: 変数のbyte型への変換手順
ただしバイトオーダーには気をつけてくださいね.
p[0]からp[3]までを順番に送って,受信側でも同じ順番で受け取ったとしても,双方のシステムのバイトオーダーが異なれば違う値になりますので.
p[0]からp[3]までを順番に送って,受信側でも同じ順番で受け取ったとしても,双方のシステムのバイトオーダーが異なれば違う値になりますので.
Re: 変数のbyte型への変換手順
- BitConverter.ToInt16 メソッド
- BitConverter.ToUint16 メソッド
- BitConverter.ToInt32 メソッド
- BitConverter.ToUint32 メソッド
# まじめにネットワークオーダーからホストオーダーへの変換をするならIPAddress.NetworkToHostOrder メソッドあたり。手抜きなら,Array.Reverse メソッドあたり。
-
ぽんた
Re: 変数のbyte型への変換手順
YuOさん、ありがとうございます。
リンク先のmsdnには先人の知恵がつまってるんですね。
上達すればコーディングの行数が減らせる、と思えば
面倒でも関数を覚えていく気力が(ちょっとだけ)出てきます。
ざっと目を通しましたが、使い方はおおよそ分かりましたので
さっそく組み込んでみます。
リンク先のmsdnには先人の知恵がつまってるんですね。
上達すればコーディングの行数が減らせる、と思えば
面倒でも関数を覚えていく気力が(ちょっとだけ)出てきます。
ざっと目を通しましたが、使い方はおおよそ分かりましたので
さっそく組み込んでみます。