最新の更新情報

 
このブログ「吟遊詩人の戯言」 の記事検索...

な,なんだってぇ~~>ΩΩΩ Ω:3バイト整数かつ2の補数表現じゃねぇ~か(怒

関連記事

センサーのデータ値がやっとまともに取れるようになって
さぁ~値がへんてこな原因を追っかけるべ,ってなって

センサーは初期状態

どうも,正の値は,あってる気がする(0の近辺な数字)
負の値が,ぶっ飛びすぎじゃろ!メチャクチャすぎる

ま,まさか...

電文の生データ,バイト配列を解析してみた...

嫌な予感的中((((;゚Д゚))))ガクガクブルブル

3バイト整数でしかも,2の補数じゃねぇ~か(苦笑

さぁ~どうやって,4バイト整数に変換すべか?


っちゅうか,4バイト整数で返せばいいじゃん!>センサ
テゲめんどくせぇ~~

【解決編】

3バイト整数を配列上で,8ビット分左シフト
これを4バイト整数に変換
んで,256で割った

たぶん,これであってるはず(爆

そのソース
[CPP]
union BYTE_INT //バイト配列とintの相互変換
{
BYTE ByteArray[4];
int data;
};


///——————————————————————–
///3byte リトルエンディアンのBYTE配列を,4バイト整数intに変換
///
///——————————————————————–
int CAccsJobMainNew::Intfrom3B(BYTE* buf)
{
BYTE_INT bi;

for(int i = 0; i < 3; i++) //8bit分左にずらして格納
{
bi.ByteArray[i+1] = buf[i];
}
bi.ByteArray[0] = 0; //下位8ビット0パテント(どうせ割られて消える)

int result = bi.data;

result /= 0x100; //256で割って右8ビットシフト(符号ビットは残される)

return result;

//昔はこれで,実装しようとした
//int result = bi.data & MASK3B_VALUE; //0~22ビットを取り出す
//int signfl = bi.data & MASK3B_SIGN; //23ビットを取り出す(符号フラグ)

//if (signfl != 0) //符号フラグが立っている場合 値をマイナスにする
//{
// result *= -1;
//}

}
[/CPP]

 
 
 
 

7 comments to な,なんだってぇ~~>ΩΩΩ Ω:3バイト整数かつ2の補数表現じゃねぇ~か(怒

  • 康ちゃん@まったり~

    ん?リトルエンディアンだと、配列への格納順逆じゃね?

  • >>康ちゃん@まったり~ さま

    いや,そのままやじ
    unionで良きに計らうから,問題ねぇ~じぃ~

    1バイトずつ取り出してビットシフトして,orするなら,
    バイトオーダー,気をつけないといけないぞな

  • 康ちゃん@まったり~

    リトルエンディアンって、後ろから頭に向かって桁が上がるから
    リトルなんじゃなかったっけ?

  • 康ちゃん@まったり~

    あ、わかった。
    そうだね^^;;;;

  • >>康ちゃん@まったり~ さま

    ビッグなら、バイト入れ替え処理がいるじぃ

    逆に実装したかと思って、ソース原本確認したところ(笑

  • 康ちゃん@まったり~

    すまぬ。
    バイト配列とかビットシフトとか、ここ10年くらい意識することがなかったもんで・・・(アセ

  • >>康ちゃん@まったり~ さま

    SQLも書く,マイコン屋なオイラ
    日々,バイト配列&バイトオーダーと格闘しておりまする(爆

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">