2016-02-15 4 views
0

J'ai le code suivant en C++ (écrit dans Visual Studio 2010).C++ Comment ajouter une chaîne au tableau 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"); 
} 

Comment puis-je ajouter une chaîne de données à un tableau de données BYTE.

+0

est-ce que 'data' est une forme de blob binaire? Si oui, pourquoi voudriez-vous virer une corde à la fin? Qu'est-ce que ça va dire? Mais la réponse est: vous ne pouvez pas l'ajouter, vous devrez créer un nouveau tampon dans lequel vous copiez les données, puis la chaîne. – kfsone

Répondre

0

Réponse courte: Vous ne pouvez pas. Donc, vous obtenez le BYTE [] et la taille, mais vous ne savez pas si les données sont sur la pile ou le tas, donc vous ne pouvez pas simplement utiliser realloc ou quelque chose pour l'agrandir.

Une approche consiste à s'assurer que la matrice est plus grande que nécessaire et à passer la taille actuelle et la taille maximale.

Une autre approche consiste à modifier l'API pour vous permettre d'utiliser realloc ou similaire pour redimensionner la baie. La seule façon que je peux penser sans changer l'API est d'utiliser une sorte de marqueur dans data pour délimiter l'espace utilisé et inutilisé (ne fonctionne pas pour les données binaires). par exemple. 0 signifie inutilisé, donc vous pouvez juste chercher le premier 0 et commencer à ajouter à partir de là.

éditer Peut-être que j'ai mal lu l'intention. Si vous ne voulez pas effectuer un changement permanent, vous pouvez prendre une copie locale, ajouter à cela (et assurez-vous de le nettoyer). Je pensais que vous vouliez un permanent, "en place" append.

+0

Merci pour votre réponse. Que diriez-vous si je change le tableau d'octets au pointeur? Comme ceci: void TEST (BYTE * data, int size) J'appelle cette fonction de C#. Honnêteté je n'ai pas plus d'expérience avec C++. –

+0

Vous ne savez toujours pas à quoi vous vous dirigez et s'il y a de l'espace pour y ajouter ou non. Pour faire quelque chose comme "realloc", vous devez soit retourner un nouveau tableau, soit prendre un paramètre que vous pouvez modifier. – John3136

+0

Puis-je créer un nouveau tableau et copier ce tableau là et convertir la chaîne en tableau et copier là? –

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); 

}