文字列に16進数の値"F69CF355B6231FDBD91EB1E22B61EA1F"
があり、次のようにunsigned char変数に値をハードコーディングすることで、プログラムでこの値を使用しています。文字列から値を取得して配置
unsigned char a[] = { 0xF6 ,0x9C ,0xF3 ,0x55 ,0xB6 ,0x23 ,0x1F ,0xDB ,0xD9 ,0x1E ,0xB1 ,0xE2 ,0x2B ,0x61 ,0xEA ,0x1F};
できる関数やその他のメソッドはありますか?それをパックすることによって16進形式の符号なし変数に?
6279 次
5 に答える
1
#include <stdio.h>
#include <ctype.h>
int hctoi(const char h){
if(isdigit(h))
return h - '0';
else
return toupper(h) - 'A' + 10;
}
int main(void){
const char cdata[]="F69CF355B6231FDBD91EB1E22B61EA1F";
unsigned char udata[(sizeof(cdata)-1)/2];
const char *p;
unsigned char *up;
for(p=cdata,up=udata;*p;p+=2,++up){
*up = hctoi(p[0])*16 + hctoi(p[1]);
}
{ //check code
int i;
for(i=0;i<sizeof(udata);++i)
printf("%02X", udata[i]);
}
return 0;
}
于 2012-05-18T16:53:46.063 に答える
0
を使用してc++でこのことを行うには、この回答を確認してください。sscanf()
cの場合、次のようになります。
char *str = "F69CF355B6231FDBD91EB1E22B61EA1F";
char substr[3] = "__";
unsigned char *a = NULL;
len = strlen(str);
a = malloc(sizeof(unsigned char)*(len/2)+1);
for ( i = 0; i < len/2; i++) {
substr[0] = str[i*2];
substr[1] = str[i*2 + 1];
sscanf( substr, "%hx", &a[i] );
}
free(a);
于 2012-05-18T18:12:56.900 に答える
0
を使用して、文字列内の 16 進値を値に変換できますsscanf
。値の配列が必要な場合は、入力文字列を 2 つの文字セグメントに分割し、sscanf
各部分を変換するために使用する関数を作成できます。(私は永遠にCをやったことがないので、それが良い方法かどうかはわかりません。)
于 2012-05-18T13:33:19.327 に答える