2024-10-03 06:31:12 发布
网友
我有这个C++定义< /p>
#define CSYNC_VERSION_INT(a, b, c) ((a) << 16 | (b) << 8 | (c))
我需要在Python中定义相同的内容。这是干什么的?如何在Python中执行相同的操作?你知道吗
我想在anttihaapala的答案中加上宏的作用:它从三个字节中创建一个int,分别是a、b和c
示例:
int main() { unsigned int a = 0x02; unsigned int b = 0xf4; unsigned int c = 0x56; unsigned int p = CSYNC_VERSION_INT(a, b, c); // now p == 0x02f456 }
它使用位移位将版本号存储在一个int中。它将“主要”版本存储在上16位,“次要”版本存储在下16位的前8位,“修订”号存储在最低8位。你知道吗
int
如果输入太大(例如,如果a超出了无符号短字符的有效范围,或者如果b或c超出了无符号字符的范围),它将无法正常工作。由于它没有类型安全性,更好的方法是生成一个内联函数,该函数对适当的类型执行相同的操作:
inline unsigned long MakeVersion(unsigned short major, unsigned char minor, unsigned char revision) { unsigned long l = (static_cast<unsigned long>(major) << 16) | (static_cast<unsigned long>(minor) << 8) | (static_cast<unsigned long>(revision); return l; }
由于Python是一种C派生语言,您应该能够使用相同的位移位来完成相同的任务。你知道吗
相当于
def CSYNC_VERSION_INT(a, b, c): return a << 16 | b << 8 | c
它将a左移16位,将b左移8位,将c原封不动地进行字节移位;然后所有这些数字按位或相加。因此,它将a, b, c压缩为一个整数的三(四)个字节,因此最低的字节是c的值,最低的第二个字节是b,最高的字节是a值。你知道吗
a
b
c
a, b, c
CSYNC_VERSION_INT(3, 2, 8)等于十六进制的0x30208或十进制的197128。你知道吗
CSYNC_VERSION_INT(3, 2, 8)
我想在anttihaapala的答案中加上宏的作用:它从三个字节中创建一个int,分别是a、b和c
示例:
它使用位移位将版本号存储在一个
int
中。它将“主要”版本存储在上16位,“次要”版本存储在下16位的前8位,“修订”号存储在最低8位。你知道吗如果输入太大(例如,如果a超出了无符号短字符的有效范围,或者如果b或c超出了无符号字符的范围),它将无法正常工作。由于它没有类型安全性,更好的方法是生成一个内联函数,该函数对适当的类型执行相同的操作:
由于Python是一种C派生语言,您应该能够使用相同的位移位来完成相同的任务。你知道吗
相当于
它将
a
左移16位,将b
左移8位,将c
原封不动地进行字节移位;然后所有这些数字按位或相加。因此,它将a, b, c
压缩为一个整数的三(四)个字节,因此最低的字节是c
的值,最低的第二个字节是b
,最高的字节是a
值。你知道吗CSYNC_VERSION_INT(3, 2, 8)
等于十六进制的0x30208或十进制的197128。你知道吗相关问题 更多 >
编程相关推荐