2016-02-15 5 views
0

У меня есть следующий код в C++ (написано в Visual Studio 2010).C++ Как добавить строку в массив BYTE?

void TEST(BYTE data[], int size) 
{ 
    wstring aData = L"Here is my string"; 
    //something code to append aData string to data array 
    WinHttpClient client(url); 
    // Send HTTP post request. 
    client.SendHttpRequest(L"POST"); 
} 

Как добавить строку AData в массив данных BYTE.

+0

является 'data' некоторой формой бинарного блоба? Если да, то почему вы хотите закрепить строку в конце? Что это может означать? Но ответ: вы не можете добавить его, вам нужно создать новый буфер, в который вы скопируете данные, а затем строку. – kfsone

ответ

0

Короткий ответ: вы не можете.

Таким образом, вы получаете BYTE [] и размер, но вы не знаете, находятся ли данные в стеке или куче, поэтому вы не можете просто использовать realloc или что-то сделать его больше.

Один из подходов состоит в том, чтобы убедиться, что массив больше, чем вам нужно, и передайте текущий и максимальный размер.

Другим подходом было бы изменить API, чтобы вы могли использовать realloc или аналогично изменению размера массива.

Единственный способ, которым я могу думать без изменения API, - использовать какой-либо маркер в data, чтобы разграничить использованное и неиспользуемое пространство (не работает для двоичных данных). например 0 означает неиспользованный, поэтому вы можете просто найти первый 0 и начать добавлять его.

Редактировать Возможно, я неправильно понял намерение. Если вы не хотите делать постоянные изменения, вы можете взять локальную копию, добавить к ней (и убедиться, что вы ее очистите). Я думал, что тебе нужен постоянный, «на месте».

+0

Спасибо за ваш ответ. Как насчет того, изменить ли массив байтов на указатель? Например: void TEST (BYTE * data, int size) Я вызываю эту функцию из C#. Честность у меня больше нет опыта работы с C++. –

+0

Вы все еще не знаете, на что вы указываете, и есть ли место для добавления к нему или нет. Чтобы сделать что-то вроде «realloc», вам нужно либо вернуть новый массив, либо сделать параметр массива, который вы можете изменить. – John3136

+0

Могу ли я создать новый массив и скопировать этот массив туда и преобразовать строку в массив и скопировать туда? –

0
#include "stdafx.h" 
#include <iostream> 
using namespace std; 
#include <boost/locale/encoding_utf.hpp> 

std::wstring utf8_to_wstring(const std::string& str) 
{ 
    return utf_to_utf<wchar_t>(str.c_str(), str.c_str() + str.size()); 
} 

int main() 
{ 
    unsigned char test[10]; 
    std::string tesStr((char*)test); 
    wstring temp = utf8_to_wstring(tesStr); 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^