な,なんだってぇ~~>ΩΩΩ Ω:3バイト整数かつ2の補数表現じゃねぇ~か(怒
関連記事
- ぎんゆぅ~さんの更新頻度が落ちているときは仕事炎上中(爆 【2025年01月09日(木)】
- 仕事が納まった,のか?一応,拘束解除命令が出たモルモルモル 【2024年12月27日(金)】
- さすがに激務すぎ,ワロタ! 【2024年12月25日(水)】
- 今週もひたすらモノ書き #JAVA 祭りがまだまだ続く そろそろC#を書かせろー 【2024年12月04日(水)】
- 【#Assembler】結局x64のアセンブラでゴニョゴニョと書き始めたオイラはバカかっ!(爆 【2024年05月13日(月)】
センサーのデータ値がやっとまともに取れるようになって
さぁ~値がへんてこな原因を追っかけるべ,ってなって
センサーは初期状態
どうも,正の値は,あってる気がする(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]
ん?リトルエンディアンだと、配列への格納順逆じゃね?
>>康ちゃん@まったり~ さま
いや,そのままやじ
unionで良きに計らうから,問題ねぇ~じぃ~
1バイトずつ取り出してビットシフトして,orするなら,
バイトオーダー,気をつけないといけないぞな
リトルエンディアンって、後ろから頭に向かって桁が上がるから
リトルなんじゃなかったっけ?
あ、わかった。
そうだね^^;;;;
>>康ちゃん@まったり~ さま
ビッグなら、バイト入れ替え処理がいるじぃ
逆に実装したかと思って、ソース原本確認したところ(笑
すまぬ。
バイト配列とかビットシフトとか、ここ10年くらい意識することがなかったもんで・・・(アセ
>>康ちゃん@まったり~ さま
SQLも書く,マイコン屋なオイラ
日々,バイト配列&バイトオーダーと格闘しておりまする(爆