大家好,下午好。所以我对这个场景仍然很陌生,但对它有很大的野心,我一直在努力学习。我认为自己精通 c++,但我一直在编写 DOS 程序,最近我将视野扩大到 Windows API....话虽如此,我注意到 Windows API 与 UNI 密切相关-代码而DOS使用ANSI ..所以我知道ANSI使用8位字符代码而UNI-CODE使用16位..所以我的问题是:
1)为什么这很重要..自从它的 16 位与 8 位相比,它是否更具体或能够保存更多信息?我的意思是我知道有些字符 ANSI 不支持 UNI-CODE 支持但是这样吗?
2) TCHAR 和 WCHAR 有什么区别,它只是 char 的 16 位版本吗?如果 WCHAR 是宽字符,那么 TCHAR 是什么?
3)我知道 LPWSTR 是指向宽字符串的长指针,但是你什么时候使用它,为什么?它只是一个窗户的东西吗?长指针不是自动16位吗?这是否意味着常规指针是 8 位?如果是这样,你为什么需要额外的位?
4)接下来为什么需要 wstring 以及是否需要将 wchar 和 tchar 与它一起用于某些功能?IE
wstring myStr;
TCHAR myChar;
if (myStr.find(myChar) != string::npos) { krmormrm }
还是有关系。。
char myChar;
if (myStr.find(myChar) != string::npos) { jnrnikvnr }
5)最后但并非最不重要的一点是,我无法在没有转换的情况下显示 WCHAR 和 wstring 甚至 int .. 例如(我想通了)我做了:
WCHAR myChar = '1';
int i = 2;
wstring myString;
ofstream File1("myFile.txt");
if (File1.is_open())
{
File1 << (char)myChar; //if i didn't typecast it to char it displayed 49 instead of 1;
File1 << (WCHAR)i; //if i didn't typecast it to WCHAR(like to char instead)it displays symbols
WCHAR temp;
copy(myString.begin(), myString.end(), temp);
File1 << (char)temp;
}
好的,所以我对 wstring 和副本有一点问题。我在我的真实程序中所做的(这只是一个快速的重写)使用了 9 个 WCHAR 变量...使用wstringstream将它们全部加载到它的变量(wss)中,然后加载到myString(我的 wstring 变量)中......所以确保它们都正确加载了我将它复制到 WCHAR 临时以将其发送到 file1 所以我可以实际看到加载到其中的内容,但由于某种原因,它加载了我想要的变量和我不想要的额外变量,我多次检查了代码并没有发现任何问题..所以我摆脱了复制功能并使用 for 循环单独显示每个变量,例如:
for (int i = 0; i < 81; i++)
{
File1 << "Box " << (WCHAR)i << ": " << (char)BoxNum[i] << "\n";
}
我得出的结论是所有内容都保持正确的值...仅供参考一行和一列中的 9... 然后我使用第一行框中的变量并将其放入 myString 中,这样我就可以使用 string.find() 函数来检查该行中的数字而不是框按框..我的问题是显示这个wstring......无论如何,抱歉,只是试图提供尽可能多的信息,也许有人也可以为我解决这个问题。