【发布时间】:2016-09-27 09:13:31
【问题描述】:
我是位新手,我正在尝试使用 UDP 发送 64 位值。
int plugin(unsigned char *Buffer) {
static const uint8_t max_byte = 0xFF;
uint8_t id[8];
id[0] = (uint8_t)((Buffer[0]) & max_byte);
id[1] = (uint8_t)((Buffer[1] >> 8) & max_byte);
id[2] = (uint8_t)((Buffer[2] >> 16) & max_byte);
id[3] = (uint8_t)((Buffer[3] >> 24) & max_byte);
id[4] = (uint8_t)((Buffer[4] >> 32) & max_byte);
id[5] = (uint8_t)((Buffer[5] >> 40) & max_byte);
id[6] = (uint8_t)((Buffer[6] >> 48) & max_byte);
id[7] = (uint8_t)((Buffer[7] >> 56) & max_byte);
}
我收到错误右移计数 >= 类型宽度。我也试过其他方法
int plugin(unsigned char *Buffer) {
uint64_t id = (Buffer[0] | Buffer[1] << 8 | Buffer[2] << 16 | Buffer[3] << 24 | Buffer[4] < 32 | Buffer[5] << 40 | Buffer[6] << 48 | Buffer[7] << 56);
printf("ID %" PRIu64 "\n", id);
}
它得到错误左移计数> =类型宽度 我检查了系统它是x86_64。有人可以告诉我它发生的原因吗?请建议我前进的道路。
【问题讨论】:
-
您必须先将 8 位值转换为 64 位值,然后才能对其进行移位。将您的 8 位值视为宽度为 8 厘米的框。将一个 8 厘米宽的盒子移动 56 厘米时,它的内容会发生什么变化?
-
缓冲区指向 8 位类型,但您移动的位超过 8 位
-
@Toby:实际上他换了
int,而不是char。但这只会转移问题。 -
@Toby:之后将 8 位移到第 7 位上方的位置?这不仅没有用,而且完全是错误的。 OP 应该重新考虑他的位操作概念。
-
当你试图在8cm宽的盒子里移动56cm的内容时,C标准委员会的一个疯子突然跳了进来,不问就从你手中抢走了盒子,然后把里面的东西放进了另一个盒子,32 厘米宽,但在其他方面完全不适合给定的内容。 (可能里面的东西是温热的食物,他把它放在负温的迷你冰箱里)。然后,您尝试在 32 厘米宽的盒子内移动 56 厘米的内容,这不起作用。解决方案是从一开始就提供一个足够大的盒子,同时防止那个疯子干扰你的业务。
标签: c