是否有win32 API将字符串转换为字符数组

时间:2015-07-17 20:37:53

标签: c++ winapi

像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

可能可以编码,但如果我想要一个库调用 使用它。

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字符串(短数组)。