c++ - 使用 C++ 在 char 数组最后一个索引中添加值

标签 c++ arrays sockets hex

我想通过 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/

相关文章:

C++ Windows 服务套接字连接错误

C++ 程序函数

c# - items.IndexOf 不打印位置

node.js - Ffmpeg:如何同时捕获音频和元数据

java - 返回单个数组值,每个方法调用从索引 0 开始,每次调用递增 1。

JavaScript:如何将字符串参数传递给函数以用于按该字符串参数的值对对象数组进行排序?

java - 在应用程序级别调整 TCP 数据包大小以实现最大吞吐量

c++ - VTK:在渲染窗口中启用分屏

c++ - lcov 问题 : weird duplicate constructor marked as not covered & function not marked as covered, 即使其行已被执行

c++ - OSX 上的 CMake 和 Boost - 没有制定目标的规则