- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在我的程序中使用 C 的 win32 api 从串行端口读取数据,这似乎是非常低级的东西。假设没有更好的从串行端口读取的方法,CreateFile 函数涉及一个 LPCWSTR 参数,我读过它看起来 LPCWSTR 是一个 wchar_t 类型。首先,我真的不明白 wchar 和 char 之间的区别,我读过关于 ansi 和 unicode 的东西,但我真的不知道它如何适用于我的情况。
我的程序使用 main 函数,而不是 wmain,并且需要从命令行获取参数并将其存储在 wchar_t 变量中。现在我知道,如果我当场编好绳子,我就能做到这一点;
wchar_t variable[1024];
swprintf(variable,1024,L"%s",L"randomstringETC");
因为看起来 L 将 char 数组转换为 wchar 数组。但是当我这样做时它不起作用;
wchar_t variable[1024];
swprintf(variable,1024,L"%s",Largv[1]);
显然是因为这是一个语法错误。我想我的问题是,有没有一种简单的方法可以将普通字符串转换为 wchar_t 字符串?
或者有没有办法完全避免这种 Unicode 的东西,并在 Windows 上使用 C 以另一种方式从串行读取..
最佳答案
没有名为 CreateFile 的 winapi 函数。有 CreateFileW 和 CreateFileA。 CreateFile 是一个宏,它根据是否定义了 _UNICODE 宏映射到这些实际函数之一。 CreateFileW 接受一个 LPCWSTR(又名 const wchar_t*),CreateFileA 接受一个 LPCSTR(又名 const char*)。
如果您还没有准备好迁移到 Unicode,那么只需显式使用 CreateFileA() 函数即可。或者更改项目设置:Project + Properties、General、Character Set。成本非零,底层操作系统完全基于 Unicode。因此 CreateFileA() 通过一个转换层,根据当前系统代码页将 const char* 转换为 const wchar_t*。
关于c - 如何在 Win32 命令行应用程序中将 argv 转换为宽字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7333416/
我是一名优秀的程序员,十分优秀!