对于某些背景,我试图编写一个系统来传递整数数据包,以便使用布尔切换来构建迷宫,以确定两个节点之间是否应该有一个墙,目前我的迷宫处理480墙,因此我不想发送包含单个项目的数据包,而是将其拆分为整数数组(长度为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++;
}
这是我目前建立的,我的想法是从一个int开始,根据bool&#34; _isWall&#34;的返回将它传递给int。并将结果移位到int的末尾。 当int达到容量时,迭代到数组中的下一个int并再次开始,直到迷宫的墙壁填充了数组。
编辑:我所要求的内容不明确。 我的按位操作似乎没有实际分配多个位到同一个整数,我哪里错了?
答案 0 :(得分:1)
使用select '2017-02-20 08:22:44.166'::timestamp(2), '2017-02-20 08:22:44.166'::timestamp(1)
timestamp | timestamp
------------------------+-----------------------
2017-02-20 08:22:44.17 | 2017-02-20 08:22:44.2
(1 row)
,而不是val | (1UL << temp2)
来设置位。稍后您可以使用按位temp2 << 1
运算符来查看该位是否已设置。必须将整个字节初始化为零,并且仅当值为true时才设置该位。这是一个例子:
&