我想知道如何在我的测试平台上用C ++设置64位变量。当我使用variable_name.io_int_write(0,value0)
和variable_name.io_int_write(1,value1)
(对于低位和高位)时,我可以看到变量已设置但反向。
例如:当我想要它为000 ... 002时,我看到200 ... 000
是否有替代命令可以提供帮助?感谢
编辑:我有一个功能void set_function (set_ * dut)
并在此函数内部,我需要设置一个64位变量dut->variable_name
感谢您的回答,在这种情况下我将如何修复Endianness
答案 0 :(得分:0)
如果要将64位整数变量设置为常量值,可以简单地说:
long long var64bit = 1L;
1L 末尾的 L 表示它是 1 的64位常量值。
如果您对十六进制感到满意并希望64位位域常量,那么设置64位变量的常用方法如下所示:
unsigned long long bitfield64bit = 0xDEADBEEFDEADBEEFL;
再次注意尾随的 L 。
如果您要将两个32位值打包成64位值,则可以使用shift和logical-OR操作执行此操作:
long long var64bit = (long long)(((unsigned long long)high_bits << 32) | (unsigned long long)low_bits);
其中* high_bits *是保持高位的32位变量,* low_bits *是包含低位的32位变量。我对无符号值进行逐位运算,因为对符号位和32位和64位整数之间的转换可能有过多的偏执。
相反的操作,将64位变量分为高位和低位可以按如下方式进行:
int high_bits = (int)(var64bit & 0xFFFFFFFFL);
int low_bits = (int)((var64bit >> 32) & 0xFFFFFFFFL);