我必须创建BYTE *数组,它将为Http请求存储一些文本和二进制数据。 类似的东西:
Content-Type: multipart/form-data; boundary=Asrf456BGe4h
--Asrf456BGe4h
Content-Disposition: form-data; name="DestAddress"
...
--Asrf456BGe4h
Content-Disposition: form-data; name="AttachedFile1"; filename="photo.jpg"
Content-Type: image/jpeg
...binary data...
我害怕使用标准的atl字符串,因为它们会截断我的二进制文件。你会如何连接这些东西?我想这样编程:
DynamicArray arr();
arr.Add("Content-Type ... ");
arr.Add(imgContent, imgContentSize);
arr.Add("Content-Type...");
BYTE* buf;
arr.GetBits(buf);
最后我应该有BYTE *数组。什么ATL课程应该为我提供这样的功能?
答案 0 :(得分:1)
首先,您可以将原始数据放入std::string
,而不会出现任何问题。它可能会使读者感到困惑,他希望std::string
包含文本,但在特定情况下(将原始数据插入HTTP响应可能是一个有效的例子),这是合理的。
对于第二个,我不确定你的意思是“截断我的二进制文件”。如果以二进制模式写入和读取文件,则应该没有问题;肯定没有我熟悉的系统(Unix和Windows)。
最后,虽然我不确定BYTE
是如何定义的(可能 - 或者至少是有希望的 - ,它是unsigned char
)。在这种情况下,最简单的解决方案可能是使用std::vector<BYTE>
来构建缓冲区。要附加一个字符串:
buffer.append( str.begin(), str.end() );
(char
到unsigned char
的隐式转换可以解决问题。)
答案 1 :(得分:1)
我假设您使用的是MSVC?我想你可以使用std::rope
类来连接你的字符串,它应该附带你的STL分发。连接多个字符串是有效的。
可以使用c_str()
检索最终的字节数组。