[英]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.