繁体   English   中英

在C ++中更改char数组的特定部分

[英]Altering specific parts of a char array in c++

我正在尝试设置一个char数组,其中前2个char等于二进制形式的698,第3个和第4个char的动态数字小于180,其余的预定义的150个字符集后跟一个eof,是否有一种简单的方法可以更改char数组,因此我可以例如这样:

char arr[155];
arr [0-1] = uint_16(698);
arr[2-3] = uint_16(178);
arr[4-154] = (another message);

我是C ++的新手,对这些东西没有经验。

C ++不提供用于数组切片的语言级机制。 但是,您可以使用一些机制来完成您要达到的目标。

您可能笨拙而危险,并使用别名(示例已删除)

但是更简单,更简洁的方法是声明一个struct:

#include <cstdint>

struct Replacement {
    uint16_t first = 698;
    uint16_t second = 178;
    char message[150] = { /*... values ...*/ };
};

int main() {
    Replacement r;
    // use 'r' instead of 'arr'.
}

如果您要绝对确定结构中没有填充

#pragma pack(push, 1)
struct Replacement {
    uint16_t first = 698;
    uint16_t second = 178;
    char message[150] = { /*... values ...*/ };
};
#pragma pack(pop)

对于698和178,这是一个技巧。 int *a = (int *)arr; *a = 678; a = (int *)(arr + 2); *a = 178; 它使用溢出来填充char数组,因此必须考虑分配顺序。

至于另一条消息,如果将其保存在另一个char数组中,请使用strcpy(better strncpy)将其复制到(arr + 4)。 或直接将消息读入(arr + 4)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM