读取 argv[] 中的原始字节
Read raw bytes in argv[]
我想知道是否有一种方法可以从 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#
谢谢!
除非您使用库来解析像这样的正则表达式字符串,否则您将需要手动解析十六进制。查看此答案(语法略有不同但功能相似):
Hexadecimal string to byte array in C
我会选择这样的东西:
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] = '[=10=]';
printf("%s", buf);
free(buf);
return 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;
}
我想知道是否有一种方法可以从 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#
谢谢!
除非您使用库来解析像这样的正则表达式字符串,否则您将需要手动解析十六进制。查看此答案(语法略有不同但功能相似):
Hexadecimal string to byte array in C
我会选择这样的东西:
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] = '[=10=]';
printf("%s", buf);
free(buf);
return 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;
}