簡體   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