J’ai des problèmes avec la conversion de caractère non signé en CSsortingng et inversement, la conversion du résultat de CSsortingng converti en caractère non signé.
D’abord, j’essaie d’utiliser CSsortingng.append () ;.
///////////////////////////////
CSsortingng result2; CSsortingng result3; unsigend char unchar_result[9]; unchar_result = {143, 116, 106, 224, 101, 104, 57, 157}; unchar_result[8] = NULL; for(int i=0; i<8; i++){ result2=(char)temp[i]; result3.append(result2); }
//////////////////////////////
en conséquence, je pense que result3 a été correctement substitué.
si j’ai vu ‘unchar_result’ avec le code ASCII, alors unchar_result = “? tj? eh9?” et result3 était “? tj? eh9?” aussi.
Mais je veux inversement convertir (CSsortingng) result3 en masortingce de caractères non signée.
unsigned char a; unsigned char testdecode[8]; for(int i=0; i<8 ; i++){ a=result3.GetAt(i); testdecode[i]=a }
après conversion, le résultat était “? tj? eh9?” mais la valeur était {63, 116, 106, 63, 101, 104, 57, 63} … je suppose que le résultat était {143, 116, 106, 224, 101, 104, 57, 157}.
Ensuite, j’essaie à nouveau avec CSsortingngA.
CSsortingngA result6; result6(unchar_result);
et je peux voir la valeur à travers la fenêtre de variable locale de l’outil de débogage. alors, résultat6 était “j? h9 앀 儆?” De plus, int len = result6.GetLength () = 13.
Comment convertir correctement les caractères non signés en CSsortingng et faire l’inverse?
La conversion en CSsortingng est assez facile, il suffit de transmettre le caractère unsigned char*
au c’tor. La conversion de CSsortingng
en unsigned char*
est un peu plus de travail, voir ci-dessous.
unsigned char orig[] = "hello world"; std::cout << orig << " (unsigned char *)" << std::endl; // Convert to a CString CString cstring(orig); std::cout << cstring << " (CString)" << std::endl; // Convert to a unsigned char* const size_t newsize = (cstring.GetLength() + 1); unsigned char* nstring = new unsigned char[newsize]; strcpy_s((char*)nstring, newsize, cstring); std::cout << nstring << " (unsigned char*)" << std::endl;
Regardez la documentation, vous pouvez construire CSsortingng à partir d’un pointeur sur le tampon de caractères MSDN . Toutes les opérations sockets en charge pour la classe CSsortingng , vous pouvez utiliser GetBuffer, fonction pour obtenir un pointeur sur le tampon interne de CSsortingng, appelez ReleaseBuffer pour s’approprier ce tampon.