C 将字符串十进制转换为十六进制十进制
如何将字符串十进制转换为十六进制十进制并将其添加到字符指针?为什么C 将字符串十进制转换为十六进制十进制,c,C,如何将字符串十进制转换为十六进制十进制并将其添加到字符指针?为什么memcpy(值+2,&value\u值,值\u长度)不工作,结果是0x02 0x01和0x02 0x01 0x4f #include <string.h> /* strlen */ #include <stdio.h> /* printf */ #include <stdint.h> /* int32_t */ #include <stdlib.h> /* strtol */ i
memcpy(值+2,&value\u值,值\u长度)代码>不工作,结果是0x02 0x01
和0x02 0x01 0x4f
#include <string.h> /* strlen */
#include <stdio.h> /* printf */
#include <stdint.h> /* int32_t */
#include <stdlib.h> /* strtol */
int main()
{
char value_type = 0x02;
char *value_value = "79"; /* Must convert to 4f */
char value_length;
int32_t num = strtol(value_value, NULL, 10);
if (num < 255)
value_length = 0x01;
else if (num < 65536)
value_length = 0x02;
else if (num < 16777216)
value_length = 0x03;
else if (num < 4294967295)
value_length = 0x04;
char *value = malloc(2 + value_length);
memcpy(value, &value_type, 1);
memcpy(value + 1, &value_length, 1);
memcpy(value + 2, &value_value, value_length);
/* expectation: 0x02 0x01 0x4f */
for (int i = 0; i < strlen(value); i++)
printf("%02x\n", value[i]);
return 0;
}
#包括/*strlen*/
#包括/*printf*/
#包括/*int32\t*/
#包括/*strtol*/
int main()
{
字符值_类型=0x02;
字符*value_value=“79”;/*必须转换为4f*/
字符长度;
int32_t num=strtol(value_value,NULL,10);
如果(数值<255)
值_长度=0x01;
否则如果(数量<65536)
值_长度=0x02;
否则如果(数量<16777216)
值_长度=0x03;
否则如果(数量<4294967295)
值_长度=0x04;
char*value=malloc(2+value\u长度);
memcpy(值和值类型,1);
memcpy(值+1,值长度为1);
memcpy(值+2,&value\u值,value\u长度);
/*期望值:0x02 0x01 0x4f*/
对于(int i=0;i
您使用了错误的变量:
memcpy(value + 2, &num, value_length);
此外,您不能将您的值标记为字符串,因为它使用二进制值。将代码更改为:
/* expectation: 0x02 0x01 0x4f */
int dumplen=len+2;
for (int i = 0; i < dumplen; i++)
printf("%02x\n", value[i]);
return 0;
/*期望值:0x02 0x01 0x4f*/
int dumplen=len+2;
对于(int i=0;i
此表达式从&value\u-value
复制value\u-length
字节
鉴于它被宣布为
char *value_value
&value\u value
被读取为指向a-pointer-to-a-char的指针
。因此,实际上您正在读取指针值
如何解决:
memcpy(value + 2, &num, value_length);
代码中的另一个问题:
您使用的是strlen(value)
,而value
不是以null结尾的C字符串。它只是用数据填充的字节数组
如何修复:
不要使用strlen
在这种情况下,您知道数组的大小:2+value\u length
。为清楚起见,您可以将其放在单独的变量中。memcpy(value+2,&value\u value,value\u length)代码>不做你认为它做的事。memcpy(value+2,&num,value\u length)
也没有复制字符串终止符以使用strlen
是它的工作原理,但我将使用memcpy(value+2,&value\u value,value\u length)代码>。那么如何将num
复制到value\u value
?@Sam您不能:value\u value
是字符串,num
是数字。@Sam,value\u value=malloc(value\u-length);memcpy(value\u value,&num,value\u length);
memcpy(value + 2, &num, value_length);