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);