如何将ULONG复制到PUCHAR

How to copy ULONG into PUCHAR

今天我试图将 unsigned long 变量复制到 unsigned char * 变量的内容中。

这样做的原因是,我写了一个 RC4 密码,它要求密钥输入是 unsigned char *,我正在使用 SYSTEMTIME class 来获取一个值并组合它带有一个 运行domly 生成的 long 值来获取我的 RC4 密钥 - 我将它用作用户创建帐户的时间戳以在我的 sqlite 数据库中进行标记。

无论如何,我 运行 遇到的问题是我无法将 ULONG 复制到 PUCHAR

我试过了

wsprintfA(reinterpret_cast<LPSTR>(ucVar), "%lu", ulVar);

我试过了

wsprintfA((LPSTR)ucVar, "%lu", ulVar);

然而,在执行我的程序后,ucVar 中的结果只是空的,或者它甚至不计算,并导致应用程序崩溃。

[编辑 1]

我认为 memcpy 方法可能会奏效,所以我尝试声明另一个变量并将其移动到 ucVar,但它仍然使应用程序崩溃 - 即它没有到达 MessageBox():

unsigned char *ucVar;
char tmp[64]; // since ulVar will never be bigger than 63 character + 1 for '[=10=]'

wsprintfA(tmp, "%lu", ulVar);
memcpy(ucVar, tmp, sizeof(tmp));
MessageBox(0, (LPSTR)ucVar, "ucVar", 0);

[/edit 1]

[编辑 2]

大小为 64 的 ucVar 上的 HeapAlloc() 解决了我的问题,谢谢 ehnz 的建议!

[/edit 2]

任何人都可以给我一些解决这个问题的方法吗?非常感谢!

此致, 安德鲁

除非您拥有要使用的内存的所有权,否则各种情况都可能发生。这些可能的范围从未被注意到的错误,因为没有其他东西已经拥有该内存,到即时崩溃,到消失的值,因为在您设置它的时间和您尝试从中检索值的时间之间,其他东西覆盖了内存它。

处理动态内存分配时的相当基本的概念,但对于外行来说是个陷阱。