如何将ULONG64转换成PCSTR?

时间:2012-01-28 13:55:22

标签: c++

我对C ++很陌生,因为我通常使用C#。

这是我目前正在使用的代码(虽然我已经尝试了很多其他的东西):

template <class T>
inline PCSTR to_string (const T& t)
{
std::stringstream ss;
ss << t;
return ss.str().c_str();
}



ULONG bugCheckCode = 0;
ULONG64 bugCheckArgs[4] = {0};
Control->ReadBugCheckData(&bugCheckCode, &bugCheckArgs[0], &bugCheckArgs[1], &bugCheckArgs[2], &bugCheckArgs[3]);

CHAR arg2[sizeof(bugCheckArgs[1])];
ZeroMemory(arg2, sizeof(bugCheckArgs[1]));

memcpy(arg2, &bugCheckArgs[1], sizeof(bugCheckArgs[1]));

Control->CallExtension(NULL, "function", arg2);

基本上,ReadBugCheckData返回一个PULONG64,我给ULONG64一个地址。我很确定这一点没问题,但由于我是所有这些记忆内容的新手,我会发布它以防万一这里的错误。

所以我现在有一个ULONG64(typedef unsigned long long ULONG64),我需要转换为PCSTR(typedef CONST CHAR * PCSTR),如果我理解正确的话,它是一个char数组???所以我尝试了在代码片段顶部发布的to_string函数,我尝试了memcpy,但我无法让它工作。

但我能得到的只是虚无或垃圾数据。我发现这个调试特别困难,因为这是一个扩展,我无法正确地执行代码。

有关如何进行此转化的任何想法?

非常感谢。

2 个答案:

答案 0 :(得分:4)

此代码:

template <class T>
inline PCSTR to_string (const T& t)
{
    std::stringstream ss;
    ss << t;
    return ss.str().c_str();
}

返回指向由str()返回的临时所拥有的内存的指针,因此一旦函数退出就会被销毁。而是使用:

template <class T>
inline std::string to_string (const T& t)
{
    std::stringstream ss;
    ss << t;
    return ss.str();
}

在通话网站上将const char*检索为:

CallSomething(to_string(x).c_str());

答案 1 :(得分:1)

看看这些功能: Conversion functions Visual C++ Runtime 安全版: Conversions functions CRT_SECURE 向下滚动到框的底部,寻找......

radix表示数字基数(普通10,二进制2,十六进制16)

char * _ui64toa(
   unsigned _int64 value,
   char (&str)[size],
   int radix 
); // C++ only

errno_t _i64toa_s(
   __int64 value,
   char *buffer,
   size_t sizeInCharacters,
   int radix