我試圖將十六進制格式的char []轉換爲十六進制的int []。在1個字節的C 2個字符中將十六進制字符[]轉換爲int []
事情是這樣的:
你好 - > 68656C6C6F - > [68,65,6C,6C,6F]
這是我的代碼:
#include <stdio.h>
#include <string.h>
uint8_t* hex_decode(unsigned char *in, size_t len, uint8_t *out);
int main(void){
unsigned char word_in[17], word_out[33];//17:16+1, 33:16*2+1
int i, len = 0;
uint8_t* out;
while(len != 16){
printf("Set new word:");
fgets(word_in, sizeof(word_in), stdin);
len = strlen(word_in);
if(word_in[len-1]=='\n')
word_in[--len] = '\0';
for(i = 0; i<len; i++){
sprintf(word_out+i*2, "%02X", word_in[i]);
}
if(len != 16){
printf("Please, use a word of 16 chars long\n\n");
}
}
printf("%s", word_in);
printf("\n");
hex_decode(word_out, sizeof(word_out), out);
return 0;
}
uint8_t* hex_decode(unsigned char *in, size_t len, uint8_t *out)
{
unsigned int i, t, hn, ln;
for (t = 0,i = 0; i < len; i+=2,++t) {
hn = in[i] > '9' ? (in[i]|32) - 'a' + 10 : in[i] - '0';
ln = in[i+1] > '9' ? (in[i+1]|32) - 'a' + 10 : in[i+1] - '0';
out[t] = (hn << 4) | ln;
printf("%s",out[t]);
}
return out;
}
但印刷後這個詞,我得到了一個分割錯誤。
該函數在arduino中完美工作,所以我認爲它應該可以在我的電腦上正常工作......問題在哪裏?
我不需要打印它,我需要將它保存到一個數值(int,uint8_t ...)數組作爲參數傳遞給其他函數。但是,謝謝,mybe我可以使用它的一部分。 – Biribu 2013-05-14 07:32:14
@Biribu char已經以數字格式保存。數字格式表示其代碼ascii。所以你可以直接使用原始字符數組作爲數字,並將其作爲參數傳遞給其他函數。無需轉換。你可以讀取原始數組作爲十六進制 – MOHAMED 2013-05-14 08:16:47