我想通过 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循环
将其添加到新数组
代码
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
谁能告诉我怎么做
最佳答案
您正在考虑表示字符串的字符与原始数字具有相同的二进制表示形式。事实并非如此。
您可能希望使用 reinterpret_cast 能够在 char 数组中传输您的大小的二进制表示:
int64_t m_imageX = 380;
const char* tmp = reinterpret_cast<const char*>(&m_imageX);
for (int i = 8 - size; i < 8; i++)
{
comm[i] = tmp[count++];
}
关于c++ - 使用 C++ 在 char 数组最后一个索引中添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53222906/