繁体   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