バックグラウンドでは、ブーリアントグルを使用して2つのノードの間に壁があるかどうかを判断するために、現在の迷路ハンドルを使用して迷路を構築する目的で整数パケットを渡すシステムを作成しようとしていますしたがって、私は単一の項目でパケットを送信するのではなく、それを整数の配列(長さ8)に分割して、送信する480/8のオブジェクトを与えます。ビット単位の整数変換
const int wallRows = mazeSize/8;
int temp = NULL;
int temp2 = NULL;
int current = NULL;
int concatCount = 0;
int* walls = new int[wallRows];
int wallIndex = 0;
for (int i = 0; i < mazeSize; i++) {
current = temp2;
//ensure my ints have only 8 bytes
if (concatCount >= 7) {
//allocate a full int to the array
walls[wallIndex] = temp;
//clear the int
temp = NULL;
//move to the next array pos
wallIndex++;
//restart the int count
concatCount = 0;
}
if (maze->allEdges[i]._iswall) {
//append a 1 to the int
temp = 0b1;
}
else {
//append a 0 to the int
temp = 0b0;
}
//increment the int count
current = (temp2 << 1) | temp;
concatCount++;
}
これは私が現在構築されたもので、私の考えは「_isWall」ブールのリターンに基づいて、int型で開始し、それをint型を渡すためだったとビット整数の最後に結果をシフトします。 intが容量に達すると、配列の次のintに繰り返して、迷路の壁が配列に移入されるまで再び開始します。
編集:私が尋ねていたものが明確ではありません。 ビット単位の操作で、実際に複数のビットを同じ整数に割り当てることはできませんが、どこが間違っていますか?
あなたの質問はありますか? – CinCout
すべてのintが8バイト長であるわけではありません。 'uint64_t'は8バイト長ですが、' CHAR_BIT == 8 '、つまりあなたのバイトが8ビット長である場合に限ります。ほとんどの場合、バイトは8ビットですが、32ビットPC、raspberri piまたはarduino用にコンパイルすると、intは64ビットにならなくなります。 – Lanting