我正在讀取無符號字符數組中的命令行十六進制參數。我的代碼:十六進制轉換在CPP中出現嚴重錯誤
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <memory.h>
#include <cstring>
unsigned char key[16] ={0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00};
int main(int argc, char** argv){
char hex_pref[]="0x";
for (int i = 0; i < 16; i++){
key[i] = strtol(strcat(hex_pref, argv[i]), NULL, 16);
std::cout << argv[i] << "\t";
}
std::cout << std::endl;
for (int i = 0; i < 16; i++)
std::cout << key[i] << "\t";
std::cout << std::endl;
return 0;
}
該程序的輸出是非常不可預測的。每次我改變參數,我都會得到奇怪的結果。
我運行它像
./a.out ab 32 bf 00 0a 2e 4c 3d 25 db 66 22 84 fb 19 72
我試圖調試,但沒有答案。有什麼建議麼?謝謝。
做到了這一點,但問題仍然存在,因爲我無法驗證密鑰[我]有。
char hex_pref[4];
strcpy(hex_pref, "0x");
for (int i = 0; i < 16; i++){
strcat(hex_pref, argv[i]);
key[i] = strtol(hex_pref, NULL, 16);
//std::cout << argv[i] << "\t";
}
std::cout << std::endl;
for (int i = 0; i < 16; i++)
std::cout << std::hex << key[i] << "\t";
std::cout << std::endl;
return 0;
多了一個失敗的嘗試。現在作爲一個用戶說,密鑰[I]打印無用即使標準::六角
for (int i = 1; i < 17; i++){
//strcat(hex_pref, argv[i]);
key[i-1] = strtol(argv[i], NULL, 16);
//std::cout << argv[i] << "\t";
}
std::cout << std::endl;
for (int i = 0; i < 16; i++)
std::cout << std::hex << key[i] << "\t";
std::cout << std::endl;
return 0;
你可以更好的使用sscanf函數用於此目的 –
是什麼,輸出什麼樣子的? –
這與[tag:cmd]有什麼關係? – aschipfl