gpt4 book ai didi

c - 获取缓冲区的大小

转载 作者:行者123 更新时间:2023-11-30 17:33:50 25 4
gpt4 key购买 nike

我想从缓冲区打印十六进制值。

message1 = calloc(1, sizeof(Message01_t));
message1->number= clientNumber;
char buffer[BUFFERSIZE];
size_t bufferLen = sizeof(buffer);
der_encode_to_buffer(&asn_DEF_Message01, message1, buffer, bufferLen);
xer_fprint(stdout, &asn_DEF_Message01, message1);
for(j=0; j<sizeof buffer ; j++)
printf("%02x ", buffer[j]);

如果我将 sizeof buffer 更改为 5,我将得到结果 I except 但使用此代码我会得到类似的结果

Enter a number :
4
<Message01>
<number>4</number>
</Message01>
30 03 02 01 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ......... A LOT OF ZEROS

最佳答案

首先,BUFFERSIZE 暗示它是全局的。您也可以将长度设为这样,并且大小相同。

如果您要在响应中查找可变长度,则需要使用 strlen()

size_t strlen(const char *s);

The strlen() function computes the number of bytes in the string to which s points, not including the terminating null byte. The strlen() function returns the length of s; no return value is reserved to indicate an error.

这是假设您从输入中收到或随输入收到一个空终止符“\0”。对于带有 c 的字符串,后面的字符串“Hi”可以看作是一个字符数组 {'H', 'i', '\0'}。如果您没有 null 终止符,那么我不确定如何处理不同的长度,除非有一个返回值或 int 您可以使用函数设置。

编辑

此外,如果您正在查找 char 或 int 的十六进制值也很重要,因为它们不同。在您的示例中,用户输入“4”,您将显示字符“4”的十六进制值,然后显示空终止符“\0”。如果您想显示数字 4 的十六进制值,那么您需要将字符串转换为整数:

int atoi(const char *str);

或者:

(int) strtol(str, (char **)NULL, 10);

然后您可以显示该数字的十六进制值。这是假设用户提供的信息是整数值。如果预期不是这样,那么仅查看字符串可能是您最好的选择。

关于c - 获取缓冲区的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com