- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我完全被蒙蔽了。我一直在寻找几个小时为什么我不能将字符串转换为 PUCHAR(unsigned char*)。这很奇怪,但出于某种原因,Windows 加密方法只接受 PUCHAR 的...(为什么?)
我找到了很多解决方案,但起初它们似乎都行不通。 ASCII 表中的前 128 个字符工作正常,但其他字符如 'ù' 和 'µ' 被转换为其他字符(大多数是奇怪的 ASCII 符号,但对应给定字符总是相同的符号)。
我现在才发现转换确实有效,但仅适用于使用 cin 从控制台读取的字符串?!硬编码字符串不起作用?!老实说,我对这种行为的原因一无所知。
这是一个例子:
cout << "With cin: ";
string password;
cin >> password;
unsigned char q = (unsigned char)password[0];
PUCHAR pbPassword = new unsigned char[1];
pbPassword[0] = q;
pbPassword[1] = NULL; //Null or garbage is printed
cout << pbPassword;
这个输出:
用 cin:
µ
µ
cout << "Without cin: ";
string password = "µ";
unsigned char q = (unsigned char)password[0];
PUCHAR pbPassword = new unsigned char[1];
pbPassword[0] = q;
pbPassword[1] = NULL;
cout << pbPassword;
这个输出:
Without cin: ╡
我是一个新手程序员,如果代码很乱,我很抱歉。
虽然我使用相同的字符,但硬编码字符串的转换不起作用。即使使用完全相同的转换。
我还注意到,我可以将一个字符放在索引 1 处,而数组的长度仅为 1,这意味着我正在访问我实际上不应该访问的内存。这怎么可能?通常这会导致某种内存访问错误,对吧?
编辑:主要问题不是如何转换,或者为什么我仍然可以将元素放入数组,即使它的长度为 1。这就是为什么 cout 对从 cin 读取的字符串和硬编码字符串的转换给出不同的结果.
最佳答案
您的字符串文字可能是在保存源文件的任何代码页中编码的。当您打印这些字符串时,它们会显示在控制台的代码页中。
从控制台读取的字符串将进入控制台的代码页,因此在发送回控制台时将正确打印。
在 Windows 上,如果你想在控制台上读取或写入非 ascii 字符,你应该使用 std::wcin
和 std::wcout
with std::wstring
来避免这个问题。然后,如果需要,您可以将 std::wstring
转换为 utf-8 或 1 字节代码页之一。
关于c++ - 当转换为 PUCHAR 并打印到控制台时,硬编码字符串给出的结果与从控制台读取的字符串不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50350921/
我完全被蒙蔽了。我一直在寻找几个小时为什么我不能将字符串转换为 PUCHAR(unsigned char*)。这很奇怪,但出于某种原因,Windows 加密方法只接受 PUCHAR 的...(为什么?
我正在寻找“WlanHostedNetworkSetSecondaryKey”和“WlanHostedNetworkSetProperty”的 Java 字符串。一个想要一个带有 CHAR[] 的结构
我需要将 C/C++ 代码 *(PUCHAR)(..) 传递给 delphi,这样我就可以毫无错误地使用它,但我不知道该怎么做。在我在 IRC 中提出的问题中,有人告诉我“它转换为指向 unsigne
我在执行 BULK OUT 时遇到 MFC 问题,它说 XferData 无效 错误 头文件是 CyAPI.H //__________________________________________
我是一名优秀的程序员,十分优秀!