【发布时间】:2019-12-20 01:27:28
【问题描述】:
我正在使用带有/NODEFAULTLIB 的msvc 编译程序,所以我不能使用任何C 库函数。如何创建一个 C 风格的字符串 (char*),其中包含像 printf("%p\r\n", voidPointer) 产生的指针 (void*) 的十六进制表示,所以我可以使用 WriteConsoleW 将其写入控制台?
WriteConsoleW 只接受一个指向缓冲区的指针,该缓冲区包含要输出的字符串,以及字符串中的字符数。如何在不使用 sprintf 等 C 运行时库函数的情况下进行转换?但是,我可以使用WinAPI 函数,例如lstrlenW。
【问题讨论】:
-
你想要十六进制吗?如果有,你知道算法吗?
-
@David Schwartz 是的,我需要十六进制。不幸的是,我不确定您所指的算法。
-
所以您正在寻找指针值的字符串表示,就像您使用
printf("%p", ptr)得到的那样? (而不是将void*视为指向字符串的指针?)您可能想在您的问题中澄清这一点。 “convert”这个词可能有歧义。 -
@KeithThompson 是的,你是对的。我已经编辑了我的帖子。
-
与您的问题无关,但在写入标准输出时通常不需要
\r\n。该实现会将单个\n字符转换为操作系统的行尾表示(\n在类 Unix 系统上,\r\n在 Windows 上)。与您的目的更不相关,但无论如何我都会提到它,十六进制是%p最常见的格式,但标准没有指定指针如何表示为字符串。你特别想要十六进制,所以这不是问题。