【发布时间】:2013-12-15 17:41:38
【问题描述】:
我正在 c++ windows api 中制作一个十六进制编辑器
我有一个丰富的文本框,我可以很好地阅读文件。问题是当我写回文件时,richtextbox 添加了某种换行符或其他东西,因此文件不会输出相同的内容。我使用消息框来查看特殊字符是什么,它似乎是某种换行符,因为它会在消息框中显示我的十六进制字节,然后在插入特殊字符的部分它将显示我的十六进制字节稍高的消息框。大约 6 个月前,我在一个汇编程序中遇到了这个问题,并且能够通过删除所有十六进制字节“13”来解决它,因为它们在汇编中没有“\n”。所以我尝试删除“\n”但它没有用,我还尝试删除“\t”、“\f”、“\r”、“\n\r”、“\r\n”和那些也不要删除它。这是我用来尝试删除特殊字符的代码(我在堆栈溢出时发现它,它似乎有效,所以我不认为这是代码错误)
str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
我什至试着写一个函数,如果你找到任何“\n”、“\t”、“\f”、“\r”、“\n\r”、“\r\n”消息框我,但它从来没有给我留言,所以它是其他一些特殊字符。
有人可以帮我弄清楚特殊字符是什么,以便我可以删除它
谢谢
这里的更新是如何从 windows 中的 Richtextbox 中删除换行符
您必须删除 '\r\n' 和 '\n' 所以这里是将 Richtextbox 的内容读入字符串并删除换行符的代码
textboxlength = GetWindowTextLength(hwndtextbox1);
GetWindowText(hwndtextbox1, buffert, textboxlength);
buffer4 = buffert;
buffer4.erase(std::remove(buffer4.begin(), buffer4.end(), L'\r\n'), buffer4.end());
buffer4.erase(std::remove(buffer4.begin(), buffer4.end(), L'\n'), buffer4.end());
textboxlength 是 LONGLONG,buffer 是 TCHAR,buffer4 是 wstring
【问题讨论】:
-
'\r\n'是一个多字符文字,其行为没有明确定义,所以我认为实际上你只是在运行两个搜索,一个用于'\r',第二个用于'\n'。没有错,但效率低下。我会在我的答案中添加一些代码,你可以试试。
标签: c++ windows winforms winapi