現在我有一個u8數組,我成功地將其轉換爲十六進制字符數組。現在,試圖將其改回到u8陣列已經很不起眼了。我想這樣的代碼:將十六進制字符數組轉換爲C中的u8數組
// DEMO:
char *message = "0f236a1f";
int i;
u8 final[4];
memset(final, 0, 4);
char* part = "00";
for (i = 0; i < 4; i++)
{
memcpy(part, &message[i*2], 2);
u8 num = 0;
sscanf(part, "%x", &num);
printf("%i", num);
final[i] = num;
}
我用預填充值,以防止搞亂零我有我的實際數據的大部分停留內存值的一切。儘管我已經嘗試了一切,但偶爾也會分配錯誤的值,並且我無法在網上找到任何其他方法來執行相同的操作。如果你能幫助我,我恨C.
編輯:
我修改我的代碼,和我展示真實的東西,現在,看它是否有幫助。可變消息在巨型char *
陣列中是464個零。該控制檯還偶爾印數除了零,不知道爲什麼:
int i;
u8 final[232];
memset(final, 0, 232);
char part[3] = "00";
part[2] = 0;
for (i = 0; i < 232; i++)
{
memcpy(part, &message[i*2], 2);
unsigned int num = 0;
sscanf(part, "%x", &num);
printf("%i", num);
final[i] = (u8)num;
}
看來你正試圖用這行'memcpy(part,&message [i * 2],2)'修改一個字符串文字,因爲零件是用字符串文字'char * part ='初始化的00" ;'。這在C中是非法的。 –
它應該只是char *部分[2];代替? – oMiKeY
@BobbySacamano不修改字符串文字看到這裏:http://stackoverflow.com/questions/718477/string-literals但它仍然是未定義的行爲。 –