你可以使用shell printf
功能是這樣的:
./a.out "$(printf "AAAAA\x08\x32\x20\xfa\x10\x16")"
的十六進制值將被轉換爲 「二進制」。
這部分也許只增加混亂,而我,可能將其刪除:
否則,你也可以做一個快速的轉換你的程序中,以使其更易於跨平臺和系統使用。粗樣本。 (這需要一個串並轉換,他們都爲\xNN
任何十六進制序列,並且除了在完成打印成十六進制):
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
/*
* Hex Dump
* */
static void txt(unsigned char *buf, int len)
{
int i;
fprintf(stdout, " ");
for (i = 0; i < len; ++i) {
fprintf(stdout,
"%c",
isprint(buf[i]) ?
buf[i] :
'.'
);
}
}
static void xxd(unsigned char *buf, int len)
{
int i, j;
for (i = 0; i < len;) {
if (!(i % 16)) {
fprintf(stdout,
"%s%03x: ",
i ? "\n" : "",
i
);
}
fprintf(stdout, "%02x ", buf[i]);
if (!(++i % 16))
txt(&buf[i - 16], 16);
}
if ((i % 16)) {
for (j = i; j % 16; ++j)
fprintf(stdout, " ");
txt(&buf[i - (i % 16)], i % 16);
}
fprintf(stdout, "\n");
}
/*
* Hex char to value.
* */
static unsigned hexval(char c)
{
if (c >= '0' && c <= '9')
return c - '0';
if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
if (c >= 'A' && c <= 'F')
return c - 'A' + 10;
return ~0;
}
/*
* Convert all hex sequences.
* */
int str2bin(char *data, unsigned char **buf_ptr)
{
int len, converted = 0;
unsigned int val;
unsigned char *buf;
buf = malloc(strlen(data) + 1);
*buf_ptr = buf;
for (; *data;) {
/* If next char is not backslash copy it and continue */
if (*data != '\\') {
*buf++ = *data++;
continue;
}
/* If we have anything else then x or X after, return error. */
if (data[1] != 'x' && data[1] != 'X')
return -1;
val = (hexval(data[2]) << 4) | hexval(data[3]);
/* If not valid hex, return error. */
if (val & ~0xff)
return -1;
*buf++ = val;
data += 4;
/* Keep track of converted numbers, "for fun". */
++converted;
}
len = buf - *buf_ptr;
fprintf(stderr, "%d hex values converted.\n", converted);
return len;
}
int main(int argc, char *argv[])
{
int len;
unsigned char *buf = NULL;
if (argc < 2) {
fprintf(stderr, "Missing argument.\n");
return 1;
}
if ((len = str2bin(argv[1], &buf)) < 0) {
fprintf(stderr, "Bad input.\n");
return 2;
}
xxd(buf, len);
free(buf);
return 0;
}
給你這樣的事情:
$ ./hexin "Hello\x20\x44\x65\x08\x01\x00\x00\xf7\xdf\x00\x02Bye"
11 hex values converted.
000: 48 65 6c 6c 6f 20 44 65 08 01 00 00 f7 df 00 02 Hello De........
010: 42 79 65 Bye
抱歉,我不太明白你的答案。什麼是「♦」? – user1090614
這是Windows爲字符4顯示的內容(即在數字鍵盤上鍵入Alt和4)。如果您使用* nix來獲得^ D類型,則會更困難。 – tabstop
好吧,所以你基本上說我必須輸入相應的十六進制值的鍵盤命令?如果在我的情況下,我想輸入「\ x08」,即ASCII中的「backspace」 - 這怎麼可能? – user1090614