如何将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]
任何人都可以给我一些解决这个问题的方法吗?非常感谢!
此致,
安德鲁
除非您拥有要使用的内存的所有权,否则各种情况都可能发生。这些可能的范围从未被注意到的错误,因为没有其他东西已经拥有该内存,到即时崩溃,到消失的值,因为在您设置它的时间和您尝试从中检索值的时间之间,其他东西覆盖了内存它。
处理动态内存分配时的相当基本的概念,但对于外行来说是个陷阱。
今天我试图将 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]
任何人都可以给我一些解决这个问题的方法吗?非常感谢!
此致, 安德鲁
除非您拥有要使用的内存的所有权,否则各种情况都可能发生。这些可能的范围从未被注意到的错误,因为没有其他东西已经拥有该内存,到即时崩溃,到消失的值,因为在您设置它的时间和您尝试从中检索值的时间之间,其他东西覆盖了内存它。
处理动态内存分配时的相当基本的概念,但对于外行来说是个陷阱。