获取指针的地址并将其转换为wxString
Getting the address of a pointer and convert it in a wxString
我正在尝试将指针的地址转换为wxWidgets库的wxString。
我有一本书,它提供了一个基于控制台的示例来解释C++中的输入/输出流系统。在这里,我们可以使用打印一些指针的地址,而不会出现太多复杂情况
const char *const variable = "again";
cout << static_cast<void*>(variable);
到目前为止,我可以理解这个例子,但(现在是复杂的)我想从这些例子中制作一些GUI来训练自己,并在书中探索wxWidgets类。我已经成功地用wxAny类的As()方法进行了一些转换,甚至在没有警告或错误的情况下编译了它。但在执行时,我在尝试转换类型时会遇到"断言失败"。
如果我让程序继续,它会打印在我的wxTextCtrl中,比如:
ﻌ̎X(
有什么想法吗??(顺便说一句,我在Windows7系统中使用CodeBlocks与Mingw32和wxWidgets 3.0)这是导致断言失败的代码:
void ConsoleFrame::OnbtnFrase2Click(wxCommandEvent& event)
{
string chaine2("Value of the pointer: ");
void* puntero = &chaine2;
wxAny anyThing= puntero;
consoleText->AppendText(anyThing.As<wxString>());
}
这就是给我断言失败错误的方法。感谢@Grady之前更正了代码。似乎我无法将void*转换为wxString。我有可能是什么问题的要点,但是,我找不到在文本控件(而不是控制台屏幕)中打印指针地址的原始问题的解决方案
在C++中执行所需操作的常用方法是使用std::stringstream
(需要#include <sstream>
)。然后你的函数体看起来是这样的:
string chaine2("Value of the pointer: ");
void* puntero = &chaine2;
stringstream tmpss;
tmpss << chaine2 << puntero;
consoleText->AppendText(tmpss.str());
如果您只想得到一个包含输出到该流的所有内容的wxString
,您只需执行以下操作:
wxString mystr = tmpss.str();
我不知道你的问题与wxWidgets有什么关系,但这对我有用:
const char * dog = "dog";
std::cout << &dog;
我不是C++专家。。但对我来说,这看起来像是"可变狗的输出地址"
如果你想把它作为一个字符串,你可以使用C++字符串流,或者只使用旧的C sprintf
char * addrString = (char *)malloc(sizeof(void *) * 2 + 3); // *2 bytes for hex rep, +3 for "0x" and null
sprintf(addrString, "%p",dog);
指针的地址和指针的内容之间存在差异,尤其是C样式(以nul结尾的字符序列)。
例如:
const char * const text = "Some Textn";
变量text
是指向字符串文字的指针。指针的内容是字符串文字所在的位置;通常称为地址。
表达式&text
表示指针的位置或地址。因此,如果指针位于地址0x4000,则表达式&text
将返回0x4000;而不是指针的内容。
StackOverflow上有一些示例用于打印变量的地址以及C样式字符串的内容。
那么,您想要一个包含指针地址的wxString
还是指针指向的字符串文字?
终于!!
我的问题的答案在这里:
http://docs.wxwidgets.org/trunk/classwx_text_ctrl.html
这是文本控件的文档。我只需要用将输出流重定向到文本控件
wxStreamToTextRedirector redirect(myTextControl);
现在我正常使用cout对象,
cout<<puntero;
并且输出将显示在文本控件中而不是控制台屏幕中。我无法创建包含地址的wxString,但到目前为止,这至少可以显示它。我知道从现在起,我可以从文本控件的内容和它的成员函数创建一个字符串。如果你们中有人有更好的答案,我很乐意接受。有趣的是,这本书中我所在的章节是断断续续的,而我的问题的解决方案却没有出现在书中。
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 获取指针的地址并将其转换为wxString
- 将 STL unicode 字符串转换为 wxString 会给出空字符串
- 将wxString转换为OpenCv的std::string
- 正在将long int转换为wxString
- 如何将wxString转换为Int以使用算术运算
- 将wxString转换为time_t