1

16 進文字列を同等の ASCII に変換しようとしています。文字列の「16 進」値が文字列として与えられます。つまり、「ABCD」の代わりに「41424344」が得られます。16 進数値となる 41 を抽出し、「ABCD」として再コード化するだけです。これが私が持っているものです。

   int main(int argc, char *argv[]){

    char *str = "ABCD";
    unsigned int val = 0;
    int i = 0;
    int MAX = 4;
    for (i = 0; i<MAX; i++){
        val = (str[i] & 0xFF);
        //printf("dec val= %d\n", val);
        //printf("hex val= %02x\n", val);
    }
    val = 0;
    char *hexstr = "41424344";
    char *substr = (char*)malloc(3);
    char *ptr = hexstr;

    for (i = 0; i<8; i++){
        strncpy(substr, ptr, 2);
        printf("substr = %s\n", substr);
        int s = atoi(substr);
        printf("s= %d\n", s);
        ptr= ptr+2;
        i = i+2;
    }
    return 0;

}

ここから先は、この "s" 値を int ではなく 16 進数にする必要があります。これはどのように行うことができますか?

アップデート:

あなたの答えの後に私が持っているものは次のとおりです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){

    char *str = "ABCD";
    unsigned int val;
    val = 0;
    int i = 0;
    int MAX = 4;
    for (i = 0; i<MAX; i++){
        val = (str[i] & 0xFF);
        //printf("dec val= %d\n", val);
        //printf("hex val= %02x\n", val);
    }
    val = 0;
    char *hexstr = "41424344";
    char *substr = (char*)malloc(3);
    char *ptr = hexstr;
    char *retstr = (char *)malloc(5);
    char *retptr = retstr;

    for (i = 0; i<8; i+1){
        strncpy(substr, ptr, 2);
        printf("substr = %s\n", substr);
        int s = strtol(substr, NULL, 16);
        printf("s= %d\n", s);
        ptr= ptr+2;
        i = i+2;
        sprintf(retptr, "%c", s);
        retptr = retptr +1;
    }
    printf("retstr= %s\n", retstr);
    return 0;

}
4

1 に答える 1

2

「s」変数行を次から変更します

int s = atoi(substr);

int s = strtol(substr, NULL, 16);

于 2013-07-16T09:26:15.413 に答える