Я хочу отправить массив через socket
. Длина массива равна 16, где последние четыре байта являются значениями.
Чтобы сделать это динамическим, я пытаюсь добавить значение в конец массива.
У меня есть unsigned char
массив
Например:
unsigned char command[] = { 0x40, 0x01, 0x00, 0x02, 0x00, 0x08, 0x11, 0x4c, 0x00, 0x00, 0xa1, 0x24 };
Я хочу добавить значение в конце этого массива.
int value = 380;
Итак, шестнадцатеричное представление 380 равно 17c
Теперь массив становится
0x40, 0x01, 0x00, 0x02, 0x00, 0x08, 0x11, 0x4c, 0x00, 0x00, 0xa1, 0x24, 0x00, 0x00, 0x01, 0x7c
где последние четыре байта являются значениями.
Я попытался добавить последние четыре байта, сначала создав массив, который имеет значения
char* temp = "00000380"
и затем с помощью for loop
добавить это в новый массив
Код
int m_imageX = 380;
char m_buf[3] = { '\0' };
int count = 0;
int value = 0;
int m_index;
unsigned char command[16];
unsigned char commandss[] = { 0x40, 0x01, 0x00, 0x02, 0x00, 0x08, 0x11, 0x4c, 0x00, 0x00, 0xa1, 0x24 };
for (m_index = 0; m_index < 12; m_index++)
{
command[m_index] = commandss[m_index];
}
std::string m_tmp = std::to_string(m_imageX);
char const *tmp = m_tmp.c_str();
char comm[8];
int size = strlen(tmp);
for (int i = 0; i < 8 - size; i++)
{
comm[i] = '0';
}
for (int i = 8 - size; i < 8; i++)
{
comm[i] = tmp[count++];
}
count = 0;
for (int j = 0; j < 8; j++)
{
if (j > 0 && j % 2 == 0)
{
command[m_index++] = atoi(m_buf);
count = 0;
memset(m_buf, NULL, sizeof(m_buf));
m_buf[count++] = comm[j];
}
else
{
m_buf[count++] = comm[j];
}
}
command[m_index] = atoi(m_buf);
Но когда я отправлял это, я обнаружил на wireshark, что передаваемый массив имеет значение, подобное
0x40, 0x01, 0x00, 0x02, 0x00, 0x08, 0x11, 0x4c, 0x00, 0x00, 0xa1, 0x24, 0x00, 0x00, 0x03, 0x50
Так может кто-нибудь сказать мне, как это сделать