在作透傳控制時,設備控制指令須要編寫在xml文件中,因爲攝像頭控制指令通常都是十六進制,因此從xml文件中讀取後會變成string字符串,實際的使用過程當中須要轉換一下,把兩個字節的字符轉成1個字節的十六進制。c++
例如 std::string str="1A023B4D"
,沒有任何分隔符,如何獲取這個十六進制字符串。而後轉換成unsigned char 的數組。數組
轉化後以下:code
unsigned char tmp[512]={0}; tmp[0] = 0x1A tmp[1] = 0x02 ...
##代碼xml
static unsigned int hex_char_to_dec(char c) { if ('0' <= c && c <= '9') { return (c - '0'); } else if ('a' <= c && c <= 'f') { return (c - 'a' + 10); } else if ('A' <= c && c <= 'F') { return (c - 'A' + 10); } else { return -1; } } static unsigned int str_to_hex(const unsigned char *str) { return (str[1] == '\0') ? hex_char_to_dec(str[0]) : hex_char_to_dec(str[0])*16 + hex_char_to_dec(str[1]); } int strhex_parse_hex(std::string in,unsigned char *out) { unsigned char hex_str[512] = { 0 }; unsigned char tmp[2] = { 0 }; unsigned int len = in.size() / 2; for (int i = 0; i < len; i++) { int idx = i * 2; tmp[0] = in.at(idx); tmp[1] = in.at(idx+1); out[i] = (unsigned char)str_to_hex(tmp); } return len; } int main(int argc,char **argv) { std::string str = "11121301"; unsigned char buffer[512] = {0}; int len = strhex_parse_hex(str, buffer); for(int i = 0; i < len; i++) { printf("%02X", buffer[i]); } printf("\n"); return 0; }