我需要使用具有以下ascii值的字符创建一个wstring:30,29,28,27,26,25.
在VB6中,我会做asc(30)+ asc(29)+等...
什么是C++等价物?
谢谢!
我有两个文件,my_program.cpp它的标题my_program.h.
my_program.cpp只包含这个:
#include "my_program.h"
using namespace std;
Run Code Online (Sandbox Code Playgroud)
my_program.h包含指向返回a的函数的指针wstring,如下所示:
using namespace std;
typedef wstring (*my_function)(wstring, int, int, int, int);
Run Code Online (Sandbox Code Playgroud)
程序不会在这种状态下编译(在typedef处停止...说ISO C++禁止声明'wstring'没有类型),但如果我#include <iostream>之前#include "my_program.h"在.cpp文件中添加,程序会奇迹般地编译.
为什么会这样?我只是希望我没有犯下愚蠢的错误,现在我会被嘲笑.
很多时候,当我与人交谈时,他们正在重新使用(在DLL项目中)wstrings和字符串,因为它们比wchar_t数组消耗更多内存.怎么样?L"qweqweqweqweqwe"wchar_t数组是否需要比wstring更多的内存,或者它是不明显的?当我必须在Ansi和Unicode(很多new wchar_t temp和delete)之间进行转换时,我有点困惑
我想在C++(VS 2010)中将LPCWSTR转换为wstring.我想在OutputDebugStringW()中使用它.
谢谢.
我是C++的新手,我遇到了这个问题.我有一个名为DATA_DIR的字符串,我需要将格式化为wstring.
string str = DATA_DIR;
std::wstring temp(L"%s",str);
Run Code Online (Sandbox Code Playgroud)
Visual Studio告诉我没有与参数列表匹配的构造函数实例.显然,我做错了什么.
我在网上找到了这个例子
std::wstring someText( L"hello world!" );
Run Code Online (Sandbox Code Playgroud)
这显然有效(没有编译错误).我的问题是,如何将存储在DATA_DIR中的字符串值放入wstring构造函数中,而不是像"hello world"这样的任意内容?
有什么区别
std::wcout << "some text" ;
Run Code Online (Sandbox Code Playgroud)
和
std::wcout <<L "some text";
Run Code Online (Sandbox Code Playgroud)
?
我找不到有关L用途的信息.
我正在使用 C# 代码,需要在 C++ dll 中调用此方法。
static std::wstring DecryptData(const std::wstring& strKey);
Run Code Online (Sandbox Code Playgroud)
我读过很多东西,我最好的猜测是传递一些对于两种语言都更容易阅读的东西,比如字符数组甚至字节数组,然后在 C++ 中构建 wstring,然后在 C# 中构建字符串。
有人已经这样做了吗?
编辑:
我阅读了链接主题,但没有一个答案对我有帮助:使用const没有帮助。
这就是我现在拥有的:C#
[DllImport(DLL_PATH, CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.LPWStr)]
public static extern string DecryptData([MarshalAs(UnmanagedType.LPWStr)]string strKey);
Run Code Online (Sandbox Code Playgroud)
C++
extern "C" __declspec(dllexport) const std::wstring DecryptData(const std::wstring& strKey) {
return WlanHelper::CWirelessHelper::DecryptData(strKey);
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个 PInvokeStackImbalance =/
我从 HTTP 服务器响应接收正文字节,但我不知道如何将它们转换为 UTF8 字符串以使用它们。
我有一个想法,但我不确定它是否有效。我需要获取响应的字节并搜索它们并修改它们,因此我需要将std::vector<BYTE>tostd::wstring或std::string.
响应的 UTF8 字节编码在 my 中std::vector<BYTE>,如何将它们转换为std::string?我要不要把它们转换成std::wstring?。
我找到了这个代码:
std::string Encoding::StringToUtf8(const std::string& str)
{
INT size = MultiByteToWideChar(CP_ACP, MB_COMPOSITE, str.c_str(), str.length(), NULL, 0);
std::wstring utf16_str(size, '\0');
MultiByteToWideChar(CP_ACP, MB_COMPOSITE, str.c_str(), str.length(), &utf16_str[0], size);
INT utf8_size = WideCharToMultiByte(CP_UTF8, 0, utf16_str.c_str(), utf16_str.length(), NULL, 0, NULL, NULL);
std::string utf8_str(utf8_size, '\0');
WideCharToMultiByte(CP_UTF8, 0, utf16_str.c_str(), utf16_str.length(), &utf8_str[0], utf8_size, NULL, NULL);
return utf8_str;
Run Code Online (Sandbox Code Playgroud)
}
但是现在,如果我想在字符串中搜索像“Ñ”这样的字符会起作用吗?,或者我是否要转换 a 中的字节std::wstring并搜索“Ñ”修改std::wstring并将其转换为std::string …
我怎样才能转换char* argv[]为wstring?我用来"/d"获取字符串路径argv并将其作为函数的参数插入ArrayOfDirContents。
int main(int argc, char *argv[])
{
double minimum = 10;
double input;
char* filename;
wstring adr(L".");
const wchar_t* adresar;
adresar = adr.c_str();
char *p;
int num;
errno = 0;
long conv;
for (unsigned i = 1; i < argc; i++) {
conv = strtol(argv[i], &p, 10);
// Check for errors: e.g., the string does not represent an integer
// or the integer is larger than int
if (errno …Run Code Online (Sandbox Code Playgroud) 这段代码无法编译。(error: no matching function for call to 'vformat(std::wstring&, fmt::v10::format_arg_store<fmt::v10::basic_format_context<std::back_insert_iterator<fmt::v10::detail::buffer<wchar_t> >, wchar_t>, int>)')
#include <fmt/xchar.h>
#include <string>
#include <iostream>
int main() {
int arg_1 = 12;
std::wstring format = L"Hello {}";
std::wstring test = fmt::vformat(format, fmt::make_wformat_args(arg_1));
std::wcout << test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,这段代码可以成功编译。
#include <fmt/xchar.h>
#include <string>
#include <iostream>
int main() {
int arg_1 = 12;
std::string format = "Hello {}";
std::string test = fmt::vformat(format, fmt::make_format_args(arg_1));
std::cout << test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 {fmt} 10.0.0 并包括 xchar.h,它的fmt::format工作原理与我对宽字符串的预期一样,看来我只使用fmt::vformat …