C ++ / ATL.Лучшая практика для объединения двоичных и текстовых данных - PullRequest
0 голосов
/ 05 июля 2011

Мне нужно создать массив 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 должны предоставить мне такую ​​функциональность?

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Я полагаю, вы используете MSVC?Я полагаю, вы можете использовать класс std::rope для объединения ваших строк, он должен поставляться с вашим дистрибутивом STL.Эффективно объединить несколько строк.

Окончательный байтовый массив можно получить с помощью c_str().

1 голос
/ 05 июля 2011

Во-первых, вы можете поместить необработанные данные в std::string без риска возникновения каких-либо проблем.Это может смутить читателя, который ожидает, что std::string будет содержать текст, но в определенных случаях (и вставка необработанных данных в HTTP-ответ может быть допустимым примером), это оправдано.

Во-вторых, яЯ не уверен, что вы подразумеваете под "усекать мои двоичные файлы".Если файл записывается и читается в двоичном режиме, проблем не должно быть;там, конечно, нет в системах, с которыми я знаком (Unix и Windows).

Наконец, хотя я не уверен, как определяется BYTE (возможно - или, по крайней мере, надеюсь), это unsigned char).В этом случае простейшим решением, вероятно, будет использование std::vector<BYTE> для создания буфера.Чтобы добавить к ней строку:

buffer.append( str.begin(), str.end() );

(неявное преобразование char в unsigned char помогает при этом.)

...