gpt4 book ai didi

c++ - 将内置类型转换为 vector

转载 作者:太空狗 更新时间:2023-10-29 23:47:50 24 4
gpt4 key购买 nike

我的 TcpClient 类在其 SendData 方法中接受 vector<char>,如下所示:

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

因此,为了使用该函数,我必须将任何内置类型(int、long、short、long long)转换为 vector<char>

我尝试了几种使用流的解决方案,但总是以我要转换的数字的 ASCII 表示形式结束(我也尝试使用二进制标志但没有成功)。但我需要数字的二进制值。

例如:

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

您会建议什么解决方案?

感谢您的帮助!

最佳答案

忽略字节顺序:

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 的某种类型具有更严格的对齐方式,并且 reinterpret_cast 会触发硬件异常(exception)。但是,我认为这种可能性相当学术。

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com