我在c ++ windows api中制作十六进制编辑器
我有一个richtextbox,我能够很好地阅读该文件。问题是当我将文件写回来时,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,buffert是TCHAR,buffer4是wstring
答案 0 :(得分:0)
Windows使用CR+LF
作为标准换行符标记 - 即两个单独的字符 - ASCII 13
后跟ASCII 10
。一个或另一个本身通常不被认为是换行符。
修改:以下是从CR+LF
移除std::string
的示例函数:
std::string RemoveLinebreak(std::string input)
{
const std::string newline("\r\n");
size_t pos = 0;
while((pos = input.find(newline, pos)) != std::string::npos) {
input.erase(pos, newline.length());
}
return input;
}
答案 1 :(得分:0)
对于wchar'\ n'是L'\ n'而'\ n'是L'\ n'
基本上你应该使用
std::wstring str
str.erase(std::remove(str.begin(), str.end(), 'L\n'), str.end());
或
std::wstring str;
int pos;
pos=str.find_first_of(Text("\n\r"));
if(pos!=std::wstring::nops)str.erase(pos,pos+1);