我需要组合两个32位值来创建一个64位值。我正在寻找类似于MAKEWORD
和MAKELONG
的东西。我可以很容易地定义自己的宏或函数,但是如果API已经提供了它,我宁愿使用它。是否有MAKELONGLONG功能?
回答
我在Windows API中找不到任何东西。但是,我知道,你基本能工作(或者,至少,很多)与德尔福,所以这里是一个快速的Delphi功能:
function MAKELONGLONG(A, B: cardinal): UInt64; inline;
begin
PCardinal(@result)^ := A;
PCardinal(cardinal(@result) + sizeof(cardinal))^ := B;
end;
甚至更快:
function MAKELONGLONG(A, B: cardinal): UInt64;
asm
end;
说明:在正常的register
调用约定,前两个参数(如果基本大小)存储在EAX和EDX中。一个(基数大小)结果存储在EAX中。现在,一个64位的结果存储在EAX(低有效位,低地址)和EDX(更高有效位,高地址)中;因此我们需要将A
移动到EAX和B
EDX,但他们已经在那里!
感谢您考虑我的背景,但事实证明,我现在正在使用C和C++。你的技巧很聪明。我会命名变量'H'和'L',这样Code Completion会提醒我他们进入了什么顺序。我的Delphi实现可以和C实现相媲美:'Result:=(UInt64(H)shl 32)或L'。 – 2010-08-13 13:47:46
我本来希望得到的答案比“我看不到一个”更确切一点,但是我可能把我的视线设置的太高,所以这个答案得到了奖励。谢谢。 – 2010-08-18 17:59:44
个人而言,我更喜欢C-宏
#define MAKE_i64(hi, lo) ( (LONGLONG(DWORD(hi) & 0xffffffff) << 32) | LONGLONG(DWORD(lo) & 0xffffffff) )
我更喜欢功能,但这不是个人喜好的问题。这是API中存在的问题。你的答案是否?此外,位掩码在您的宏中没有任何贡献。 – 2014-01-09 15:59:38
- 1. 是否有建设功能?
- 2. OCaml是否有popcnt功能?
- 3. Redis是否有decr功能
- 4. 是否有功能大纲?
- 5. 是否有可能这两个功能
- 6. 是否有可能proxify任何功能
- 7. 是否有可能宣布从功能
- 8. 现有功能的组合是否具有新功能?
- 9. 功能是否快?
- 10. bash是否功能
- 11. 是否有jQuery退出功能?
- 12. 是否有FullCalendar的'恢复'功能
- 13. Netezza是否具有ODBC DESCRIBE功能?
- 14. 是否有与ilmerge相反的功能?
- 15. NumPy是否具有均匀性功能?
- 16. 这是否有意义 - 功能?
- 17. Ruby on Rails是否有“canvas_tag”功能?
- 18. 是否有反向映射功能?
- 19. SVMlight中是否有缩放功能?
- 20. vim是否具有Notepad ++功能?
- 21. VBA是否具有ATan2功能?
- 22. ValueInjecter是否具有这些automapper功能?
- 23. Nifi是否具有循环功能?
- 24. 是否打印功能具有在python
- 25. Ogre3D是否有全功能的OBB类?
- 26. blueprintjs是否具有步进功能?
- 27. LESS是否具有“扩展”功能?
- 28. Lua中是否有Python的defaultdict功能
- 29. 交叉是否有R功能?
- 30. Doxygen是否具有续行功能?
通过 “合并,” 你的意思是 “添加” 或 “正片叠底”? – mcandre 2010-08-12 20:03:16
@mcandre:他是指MAKEWORD的意思。 – 2010-08-12 20:08:36
Andreas是对的,@Mcandre。就像我说的,“和MAKEWORD和MAKELONG类似。” – 2010-08-12 20:19:14