将 typedef short 转换为矢量(字符)



我是C++的新人。有谁知道如何将 typedef short 转换为 vector(char( ?将解压缩转换为矢量(字符(。

opusencoder encodedatag;
opus_int16 *decompress = encodedatag.encodedata(...);

假设收到的短裤位于主机的字节序中,并且短裤实际上是 16 位(uint16_t会更好(,并且字符预计是短裤的大端表示,将短裤转换为 char 可以像这样完成:

std::pair<uint8_t, uint8_t> convert_uint16_to_uint8s(uint16_t in)
{
    std::pair<uint8_t, uint8_t> out;
    out.first = in >> 8;
    out.second = in & 0xff;
    return out;
}

如果您知道解压缩指向的数组长度,则可以迭代数组并转换每个短字符和push_back字符。

std::vector<uint8_t> output;
for (int i = 0; i < decompress_length; ++i)
{
    std::pair<uint8_t, uint8_t> chars = convert_uint16_to_uint8s(decompress[i];
    output.push_back(chars.first);
    output.push_back(chars.second);
}

(代码作为示例,未编译或测试(

我假设你有一个short,你想把它表示为vector<char>中的char序列。

如果是这样的话,那就是我的建议,用一个简单的测试:)

#include <iostream>
#include <vector>
#include <algorithm>
using opus_int16 = short;
std::vector<char> toVector(opus_int16 arg)
{
    std::vector<char>   converted;
    opus_int16          remainder(0);
    bool                isNegative((arg < 0) ? true : false);
    if (isNegative)
        arg = -arg;
    while (arg != 0)
    {
        remainder = arg % 10;
        arg /= 10;
        converted.push_back(remainder + 48);
    }

    if (isNegative)
        converted.push_back('-');
    std::reverse(converted.begin(), converted.end());
    return converted;
}
int main(int argc, char **argv)
{
    opus_int16 example = -156;
    std::vector<char> test(toVector(example));
    for (auto i : test)
        std::cout << i;
    std::cin.get();
    return 0;
}

最新更新