像stringtoshortArray这样做:
short arr[5];
LPCTSTR teststr = "ABC"; // passed as an argument, can be anything
input= stringtoshortarray(teststr, arr);
output:
arr[0] = 41;
arr[1] = 42;
arr[2] = 43;
arr[3] = 0;
可能是一个提供数组大小的函数说
int sz = SizeofArray(arr);
output:
sz = 3
可能可以编码,但如果我想要一个库调用 使用它。
答案 0 :(得分:1)
http://www.cplusplus.com/reference/string/string/c_str/
返回一个指向数组的指针,该数组包含一个以空字符结尾的字符序列(即C字符串),表示字符串对象的当前值。
并不是必须用一些常量初始化数组吗?为什么你需要找出尺寸?
答案 1 :(得分:1)
如果您使用的是Win32
,则不需要C++
。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
std::string in = "Input";
std::vector<short> out(in.size());
std::transform(
in.begin(),
in.end(),
out.begin(),
[] (const char i) -> short
{
return static_cast<short>(i);
});
for(auto o : out)
std::cout << o << ' ';
std::cout << std::endl;
return 0;
}
将输出:73 110 112 117 116
int main()
{
char in[] = "Input";
short out[5];
// If you don't know the length,
// then you'll have to call strlen()
// to get a proper begin/end iterator
std::transform(
std::begin(in),
std::end(in),
std::begin(out),
[] (const char i) -> short
{
return static_cast<short>(i);
});
for(auto o : out)
std::cout << o << ' ';
return 0;
}
意识到如果你不知道字符串的长度并且必须调用strlen()
那么你会增加问题的复杂性,这里有一个更简洁的函数来满足这个特定的用例。
#include <algorithm>
#include <iterator>
using namespace std;
std::vector<short> to_short_array(char* s)
{
std::vector<short> r;
while(*s != '\0')
{
r.push_back(static_cast<short>(*s));
++s;
}
return r;
}
int main()
{
char stuff[] = "afsdjkl;a rqleifo ;das ";
auto arr = to_short_array(stuff);
for(auto a : arr)
{
std::cout << a << ' ';
}
std::cout << endl;
}
答案 2 :(得分:0)
也许你问的是lstrlen
函数 - 获取字符串的长度? lstrlen
适用于ANSI(ASCII)和Unicode字符串。如果你想获得数组静态大小(无论是否来自字符串),你可以这样做:
int len = sizeof arr / sizeof *arr;
它将返回任何元素大小的数组元素数。
另请参阅MultiByteToWideChar
API - 我想您正在寻找它。它会将char
字符串(数组)转换为Unicode字符串(短数组)。