我正在尝试使用 C(gcc v-5.1) 中的内置库 (itoa) 将字符转换为其二进制文件,使用 Conversion of Char to Binary in C 中的示例,但我得到了 itoa 函数的字符输入的 7 位输出。但是由于 C 中的字符本质上是一个 8 位整数,所以我应该得到 8 位输出。任何人都可以解释为什么会这样吗? ?
执行二进制转换的代码:
enter for (temp=pt;*temp;temp++)
{
itoa(*temp,opt,2); //convert to binary
printf("%s \n",opt);
strcat(s1,opt); //add to encrypted text
}
PS:- 这是我在 stackoverflow.com 上提出的第一个问题,对于任何错误提前表示歉意。
最佳答案
您可以使用 printf( "%2X\n", *opt );
将 8 位值打印为 2 个十六进制符号。
它将打印 opt
的第一个 char
。然后,您必须使用 opt++;
将指针增加到下一个字符。
X 表示您希望将其打印为大写十六进制字符(使用 x 表示小写),而 2 将确保即使 opt
小于 0x10 也会打印 2 个符号
。
换句话说,值 0xF
将被打印 0x0F
...(实际上是 0F
,您可以使用 printf( "%# 2X\n", *opt );
打印 0x
)。
如果你绝对想要一个二进制值,你必须创建一个函数来打印正确的 0 和 1。互联网上有很多这样的函数。如果您想自己制作,阅读有关按位运算的内容可能会对您有所帮助(如果您无论如何都想使用二进制文件,则必须了解按位运算)。
现在您可以根据需要打印它(如上所述的十六进制或使用您自己的二进制函数),您可以使用 sprintf
函数重定向 printf
的输出。
其原型(prototype)为int sprintf( char* str, const char* format, ... )
。 str
是目的地。
就您而言,您只需将 strcat
行替换为 sprintf( s1, "%2X\n", *opt);
或 sprintf( s1, "%s\n", your_binary_conversion_function(opt) );
。
请注意,使用前者,您必须为 opt
中的每个 char
将 s1
加 2,因为一个 8 位值是2 个十六进制符号。
如果之前不是这样的话,您可能还需要自己管理 s1
的内存。
关于c - itoa 为字符输入提供 7 位输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38032755/