[英]Convert hexidecimal char array to u8 array in C
現在我有一個u8數組,我已成功將其轉換為十六進制char數組。 現在,嘗試將其改回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;
}
您正在使用以下行創建未定義的行為:
char* part = "00";
for (i = 0; i < 4; i++)
{
memcpy(part, &message[i*2], 2);
...
sscanf(part, "%x", &num);
part
指向只讀內存(這就是為什么在這樣的字符串中,我們通常將它們聲明為const char*
從而在進行修改嘗試時導致編譯器錯誤) 。
您應該使用以下命令為字符串和空終止符分配足夠的空間:
char part[3] = "00";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.