したがって、3つの数字があります。 1つはchar
であり、他の2つはint16_t
(short
とも呼ばれますが、表によれば、短絡は確実に16ビットではありません)。異なる長さの2進数を連結する
私はそれらを連結したいと思います。
1001000111111111111111011001011010110101000000000000000000000000
を使用する:
10010001
1111111111111101
1001011010110101
私は含むlong long
で終わるしたいと思います。だから、それらの値があったと言います私がオンラインで見つけたいくつかのソリューション、私はこれでうまくいく:
long long result;
result = num1;
result = (result << 8) | num2;
result = (result << 24) | num3;
しかし、それは動作しません。それはデコードされると私に非常に奇妙な数字を与えます。
char num1 = num & 0xff;
int16_t num2 = num << 8 & 0xffff;
int16_t num3 = num << 24 & 0xffff;
はここで何が起こっている:場合
はここにある、私のデコードコードに問題があるのか?私はそれがlong long
のサイズと関係があると思うが、私はそれの周りに私の頭を包むことができず、私は後でそれ以上の数字のための部屋が欲しい。
私はそれを見ていきますが、普通の数字が最も速いので、別のアプローチ(左の代わりに数字を入れていますか?)を考えるかもしれません。 – Cheezey
彼は 'long long'ではなく' long long'を使用しています。 'long long'は少なくとも64ビットしか格納できません。彼は40ビットしか必要としません。 –