簡體   English   中英

remove '\0' 從 c 語言的字符串數組中刪除字符,並將其替換為空格 ascii 代碼

[英]remove '\0' remove character from string array in c language and put instead replace it space ascii code

C 中的位字段 在 C 中,我們可以指定結構和聯合成員的大小(以位為單位)。 當我們知道一個字段或一組字段的值永遠不會超過限制或在一個小范圍內時,我們的想法是有效地使用 memory。 如果存儲有限,我們可以將 go 作為位域。 大小為 0 的特殊未命名位字段用於在下一個邊界上強制 alignment。 例如考慮以下程序。 例如,考慮以下不使用位字段的日期聲明。 我可以有指向 5 位位域成員的指針,因為它們可能不是從字節邊界開始的,但我可以將新的指針結構分配給僅最后一位結束的地址。 我宣布 5 位 ascii 碼。 請看我的代碼:

#include <stdio.h>
 
// Space optimized representation of the date
struct date {
    // d has value between 0 and 31, so 5 bits
    // are sufficient
    int d : 5;
 
    // m has value between 0 and 15, so 4 bits
    // are sufficient
    int m : 4;
 
    int y;
};
 
int main()
{
    printf("Size of date is %lu bytes\n",
           sizeof(struct date));
    struct date dt = { 31, 12, 2014 };
    printf("Date is %d/%d/%d", dt.d, dt.m, dt.y);
    return 0;
}
Output: 

Size of date is 8 bytes
Date is -1/-4/2014

結果 output 為負數。 后面發生的事情是值 31 存儲在 5 位帶符號的 integer 中,它等於 11111。MSB 是 1,所以它是一個負數,你需要計算二進制數的 2 的補碼以獲得它的實際值是內部完成的。 通過計算 2 的補碼,您將得到值 00001,它相當於十進制數 1,因為它是負數,所以您得到 -1。 類似的事情發生在 12 上,在這種情況下,您得到 4 位表示形式 1100,在計算 2 的補碼時,您得到 -4 的值。 上面的代碼告訴我我的代碼和解決方案是正確的嗎? 我們可以替換'\0'字符並添加空格ascii碼。 如果我的存儲空間非常低,我可以使用 5 位而不是 8 位或 7 位 ascii 代碼。 但在這種情況下,我可以為它使用指針。但問題是無符號,memory 中的地址是符號。我們可以使用符號地址並按最后一位標記並將其轉換為十六進制。 請告訴我我的解決方案是否正確?

int d: 5允許您表示-1615之間的值,而不是031之間的值。

int m: 4允許您表示-87之間的值,而不是015之間的值。

您需要改用unsigned int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM