c++ - 将 vector<unsigned char> 转换为 vector<unsigned short>

标签 c++

我正在从一个二进制文件中获取数据,从文件中读取数据并写入一个无符号字符 vector 。我无法编辑它,因为我正在使用外部库。

但是我从文件中读取的数据是一个 16 位图像,我想将数据放入一个 unsigned short vector 中

也许我可以为它做一个类型转换?

研发。

最佳答案

通用方法(非防弹):

#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>

typedef unsigned char u8;
typedef unsigned short u16;

u16 combine_two_bytes(u8 a, u8 b) {
    return a | (b << 8);
}

template<typename InIter, typename OutIter, typename InT, typename OutT>
void combine_pairs(InIter in, InIter in_end, OutIter out, OutT (*func)(InT, InT)) {
    while(1) {
        if(in == in_end) {
            break;
        }

        InT &left = *in++;

        if(in == in_end) {
            break;
        }

        InT &right = *in++;

        *out++ = func(left, right);
    }
}

int main() {
    using namespace std;    // lazy

    u8 input[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
    const size_t in_size = sizeof(input) / sizeof(*input);
    u16 output[in_size / 2];

    cout << "Original: ";
    copy(input, input + in_size, ostream_iterator<int>(cout, " "));
    cout << endl;

    combine_pairs(input, input + in_size, output, combine_two_bytes);

    cout << "Transformed: ";
    copy(output, output + in_size / 2, ostream_iterator<int>(cout, " "));
    cout << endl;

    return 0;
}

关于c++ - 将 vector<unsigned char> 转换为 vector<unsigned short>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1898212/

相关文章:

c++ - 测量由我的程序引起的设备驱动程序 CPU/IO 利用率

c++ - Qt 5 : const char * QString cast

c++ - 如何在 Visual Studio 2010 中为代码创建 "Application file"

c++ - 当端口上有字符时,select() 调用不返回

C++:使用同步时重命名而不是删除和复制

c++ - mongodb - 将字段附加到 BSONObj

c++ - 由模板成员函数引起的错误 C2275。这段代码有错吗?

c++ - 出现在函数表达式中的变量是否通过引用获取参数但通过值 odr-used 返回?

C++ 编写内联函数作为参数传递

c++ - 使用模板构建哨兵节点 - C++