0

我正在使用 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,所以在创建字符串时添加了空格,我该如何防止这种情况发生?

4

3 回答 3

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); 
于 2012-06-21T22:31:54.903 回答
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);
于 2012-06-21T05:20:10.930 回答
0

您可以只使用字符串列表并添加您想要的字符串,然后将字符串列表保存到文件中。

TStringList *Temp = new TStringList( );
Temp->Add("123456");
Temp->SaveToFile(("example.txt");

delete Temp;
于 2012-06-21T07:38:27.227 回答