代码之家  ›  专栏  ›  技术社区  ›  nabulke

将内置类型转换为向量<char>

c++
  •  2
  • nabulke  · 技术社区  · 16 年前

    我的TcpClient类接受 vector<char>

    void CTcpClient::SendData(const vector<char>& dataToTransmit)
    

    因此,为了使用函数,我必须将任何内置类型(int、long、short、long-long)转换为 .

    例如:

    int num = 0x01234567
    vector<char> whatIWant = {0x01, 0x23, 0x45, 0x67}
    

    谢谢你的帮助!

    2 回复  |  直到 16 年前
        1
  •  5
  •   sbi    16 年前

    忽略结尾:

    template< typename T >
    char* begin_binary(const T& obj) {return reinterpret_cast<char*>(&obj);}
    template< typename T >
    char* end_binary  (const T& obj) {return begin_binary(obj)+sizeof(obj);}
    
    int num = 0x01234567;
    vector<char> whatIWant( begin_binary(num), end_binary(num) );
    

    但是,我会用 unsigned char 作为字节类型。

    我觉得有必要补充一点,一如既往地,使用 reinterpret_cast 使此实现的结果具体化。我认为人们可以想象(尽管几乎没有)一个实现 char 有比某些类型更严格的对齐 T 然后呢 重新解释 将触发硬件异常。然而,我认为这种可能性相当学术。

    此外,这两个函数可能会受益于编译时断言 T型 . 通常,指针, struct 包含指针,非POD类型不应与此一起使用。

        2
  •  4
  •   sharptooth    16 年前

    首先,千万不要送 int s和其他类型大于 char

    第二,您可以重载该方法以接受内置类型并使用如下函数 htons() 内部用于以独立于机器的方式将数据转换为网络层顺序。

    如果你还想用 vector -用这样的方法:

    vector<char> temp( sizeof( yourVariable ) );
    memcpy( &temp[0], &yourVariable, sizeof( yourVariable ) );