【问题标题】:Convert typedef short to vector (char)将 typedef short 转换为向量 (char)
【发布时间】:2017-08-17 05:56:39
【问题描述】:

我是 C++ 新手。有谁知道如何将 typedef short 转换为 vector(char) ?将解压转换为向量(char)。

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

【问题讨论】:

  • opusencoder 是什么,opus_int16 是什么,请详细说明您期望的输入和输出

标签: c++ visual-studio type-conversion converter


【解决方案1】:

我假设您有一个short,并且您想将其表示为chars 中的vector<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;
}

【讨论】:

    【解决方案2】:

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

    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);
    }
    

    (以代码为例,未编译或测试)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多