С ++ пакетное слияние имени пользователя между байтовой проблемой - PullRequest
0 голосов
/ 08 мая 2020

Устал из-за этой проблемы. Я пробовал все, чтобы сделать эту базовую c вещь, но безуспешно!

Вот что я пытаюсь сделать:

unsigned char info[] = {0x01, 0x02, 0x03, 0x68, 0x69, 0x04 };
send(my_socket, (char*)info, sizeof(info), 0);

Здесь все работает нормально, как вы можете см.

0x68 0x69 = hi

Я пытаюсь создать настраиваемую строку между (0x1,0x2,0x3) и (0x4), поэтому она должна быть такой:

// whatever length !
unsigned char USERNAME[] = { 0x68, 0x69, 0x68, 0x69, 0x68, 0x69 }
// I want merge username between the packets !
unsigned char info[] = {0x01, 0x02, 0x03, USERNAME, 0x04 };

кто-нибудь, пожалуйста?

1 Ответ

1 голос
/ 08 мая 2020

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

Поскольку info и USERNAME равны const size array, вы не можете напрямую вставить один в другой, сначала создайте массив размером с длину обоих массивов. Затем, где хотите, просто определите позицию. Вы должны создать отдельную функцию, чтобы объединить это.

#include <iostream>

using namespace std;
int main(){

    unsigned char USERNAME[] = {0x68, 0x69, 0x68, 0x69, 0x68, 0x69};
    unsigned char info[] = {0x01, 0x02, 0x03, 0x04};

    int usernameSize = *(&USERNAME + 1) - USERNAME;
    int infoSize = *(&info + 1) - info;
    int totalSize = usernameSize + infoSize;

    unsigned char mergedInfo[totalSize]; 

    int pos = infoSize - 2; // whatever position you want 
    int i=0; // iterator

    while(i < totalSize){
        if(i < pos){
            mergedInfo[i] = info[i];
        }else if(i < (pos + usernameSize)){
            mergedInfo[i] = USERNAME[i-pos];
        }else{
            cout << " i " <<i-(usernameSize) << endl;
            mergedInfo[i] = info[i-usernameSize];
        }
        i++;
    }

    // debugging -> to check
    for(auto const& i:mergedInfo){
        cout << static_cast<int>(i) << " ";
    }

    return 0;
}

Удачного кодирования; -)

...