char a=-1,unsigned char a=-1解析

printf("%d",a);

-1本来是整型,占4个字节,但是char只占1个字节,所以

-1的补码本来是:32个1

现在是:11111111

对于char a=-1来说,输出的还是-1,

但是unsigned char a=-1来说,输出%d是整型,就要进行整型提升,

在前面补充符号位,又因为unsigned 没有符号位,所以补充0,

就变成了24个0+8个1

就输出255;

如果是这样

char a=-1;

printf("%u",a);

补码:11111111

%u整型提升,在前面补充符号位

就变成了32个1;

输出4294967295。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个接口是用来解析 ASN.1 编码的数据的,可以在 OpenSSL 库中使用。ASN.1 是一种用于描述数据结构和编码的标准。在这个具体的问题中,要使用这个接口来解析以下数据: -----BEGIN TR34 Sample KDH 1 IssuerAndSerialNumber PEM File----- MEowQTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDFRSMzQgU2FtcGxlczEbMBkGA1UEAxMSVFIzNCBTYW1wbGUgQ0EgS0RIAgU0AAAABg== -----END TR34 Sample KDH 1 IssuerAndSerialNumber PEM File----- 具体的使用步骤如下: 1. 首先,需要将数据从 PEM 格式转换为 DER 格式,可以使用 OpenSSL 库中的 PEM_read_bio_X509() 函数将数据读入 BIO 中,并使用 d2i_X509_bio() 函数将数据转换为 DER 格式。 2. 然后,可以调用 ASN1_parse() 函数来解析 DER 格式的数据。这个函数的第一个参数是一个 BIO 对象,第二个参数是一个指向要解析的数据的指针,第三个参数是数据的长度,第四个参数是缩进的级别。 下面是一个简单的示例程序,演示了如何使用 ASN1_parse() 函数解析 DER 格式的数据: ```c #include <openssl/asn1.h> #include <openssl/bio.h> #include <openssl/x509.h> int main() { // 读入 PEM 格式的数据 const char *data = "-----BEGIN TR34 Sample KDH 1 IssuerAndSerialNumber PEM File-----\n" "MEowQTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDFRSMzQgU2FtcGxlczEbMBkGA1UE\n" "AxMSVFIzNCBTYW1wbGUgQ0EgS0RIAgU0AAAABg==\n" "-----END TR34 Sample KDH 1 IssuerAndSerialNumber PEM File-----\n"; BIO *bp = BIO_new_mem_buf((void *)data, strlen(data)); X509 *x509 = PEM_read_bio_X509(bp, NULL, NULL, NULL); unsigned char *der_data = NULL; int der_len = i2d_X509(x509, &der_data); // 解析 DER 格式的数据 ASN1_parse(NULL, der_data, der_len, 0); // 释放资源 OPENSSL_free(der_data); X509_free(x509); BIO_free(bp); return 0; } ``` 在这个示例程序中,首先将 PEM 格式的数据读入 BIO 中,然后使用 PEM_read_bio_X509() 函数将数据转换为 X509 对象,再使用 i2d_X509() 函数将数据转换为 DER 格式。最后,调用 ASN1_parse() 函数解析 DER 格式的数据,并释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值