我想知道是否有一种方法可以从C命令行读取字节(如:\x00\x01\x02
)。
例如:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("%s", argv[1]);
return 0;
}
user@UbuntuServer: ~/Code# gcc Program.c -o Program
user@UbuntuServer: ~/Code# ./Program "\x48\x69"
Hiuser@UbuntuServer: ~/Code# ./Program "\x48\x69\x0a"
Hi
user@UbuntuServer: ~/Code#
谢谢!
答案 0 :(得分:2)
除非使用库解析这样的正则表达式字符串,否则需要手动解析十六进制。查看以下答案(语法稍有不同,但功能相似):
答案 1 :(得分:0)
我会选择这样的东西:
int main(int argc, char **argv)
{
char *buf = malloc(strlen(argv[1]) / 4 + 1);
size_t i = 0;
for (char *tok = strtok(argv[1], "\\x"); tok; tok = strtok(NULL, "\\x"))
{
sscanf(tok, "%02hhx", buf + i);
i++;
}
buf[i] = '\0';
printf("%s", buf);
free(buf);
return 0;
}
答案 2 :(得分:0)
我在this线程上找到了从HEX到ASCII的转换函数,并对其进行了修改以适合我的情况。
#include <stdio.h>
#include <string.h>
int hexToInt(char c) {
int first = c / 16 - 3;
int second = c % 16;
int result = first * 10 + second;
if(result > 9) {
result--;
}
return result;
}
int hexToASCII(char c, char d) {
int high = hexToInt(c) * 16;
int low = hexToInt(d);
return high + low;
}
int main(int argc, char *argv[]) {
char* hexString = argv[1];
char buf = 0;
for(int i = 0; i < strlen(hexString); i++) {
if(i % 2 != 0) {
printf("%c", hexToASCII(buf, hexString[i]));
} else {
buf = hexString[i];
}
}
return 0;
}