我正在使用Embarcadero C ++ Builder XE,我正在尝试将123456写入这样的文本文件:
String teststring = "123456";
int iFileHandle = FileCreate("example.txt");
int iLength = teststring.Length()*sizeof(wchar_t);
int output = FileWrite(iFileHandle, teststring.w_str(), iLength);
但输出是这样的:
1 2 3 4 5 6
每个角色后都添加了空格。我可以看到iLength是12,所以在创建字符串时添加了空格,我该如何防止这种情况?
答案 0 :(得分:1)
System::String
在XE中编码为UTF-16,它使用16位值。您看到的那些“空格”是这些字符值的高位字节,这些字符值是ASCII字符值的空值。如果您不希望文件中包含这些字节,则必须将String
转换为不使用它们的其他编码,例如:
String teststring = "123456";
AnsiString s = teststring; // or UTF8String, or any other MBCS encoding you want
int iFileHandle = FileCreate("example.txt");
int iLength = s.Length() * sizeof(AnsiChar);
int output = FileWrite(iFileHandle, s.c_str(), iLength);
答案 1 :(得分:0)
iLength应该是12,因为字符串长度是6,在这种情况下wchar_t的大小是2。 实际上,创建字符串时不会添加空格。当您从字符串创建宽字符串时,这些是2.,4.,6.,8和10.字节分配并初始化为空格字符:
teststring.w_str()
尝试使用c_str()代替:
String teststring = "123456";
int iFileHandle = FileCreate("example.txt");
int iLength = teststring.Length();
int output = FileWrite(iFileHandle, teststring.c_str(), iLength);
答案 2 :(得分:0)
您可以使用字符串列表并添加所需的字符串,然后将字符串列表保存到文件中。
TStringList *Temp = new TStringList( );
Temp->Add("123456");
Temp->SaveToFile(("example.txt");
delete Temp;