作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是位新手,我正在尝试使用 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。有人可以告诉我发生这种情况的原因吗?请建议我前进的方向。
最佳答案
发生这种情况基本上是因为默认的整数提升。
当你这样做时:
uint64_t id = Buffer[7] << 56;
那个 Buffer[7]
是一个 unsigned char
,但它在算术表达式中被提升为 int
,并且你的 int
不是 64 位。左侧的类型不会自动“感染”右侧,这不是 C 的工作方式。
您需要转换:
const uint64_t id = ((uint64_t) Buffer[7]) << 56;
等等。
关于c - 右移计数 >= 类型宽度或左移计数 >= 类型宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418423/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!