な,なんだってぇ~~>ΩΩΩ Ω:3バイト整数かつ2の補数表現じゃねぇ~か(怒
関連記事
- 【#Assembler】結局x64のアセンブラでゴニョゴニョと書き始めたオイラはバカかっ!(爆 【2024年05月13日(月)】
- 【#VCPP #VisualStudio】VS2022のVC 64ビットコンパイルでインラインアセンブラが使えなくなってるぞー 【2024年05月10日(金)】
- 【#CPP】出先でC++にてライブラリの緊急実装!脳死したーキョムリすぎるー 【2024年01月15日(月)】
- 【C#】謎な改造アプリ,SIMD命令を導入して高速化しようか,思案中 【2023年11月14日(火)】
- 生成AI「仕事で利用」2割 正確性などに懸念(23/5/7) 【2023年05月07日(日)】
センサーのデータ値がやっとまともに取れるようになって
さぁ~値がへんてこな原因を追っかけるべ,ってなって
センサーは初期状態
どうも,正の値は,あってる気がする(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も書く,マイコン屋なオイラ
日々,バイト配列&バイトオーダーと格闘しておりまする(爆