c - itoa 为字符输入提供 7 位输出

标签 c itoa

我正在尝试使用 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 中的每个 chars1 加 2,因为一个 8 位值是2 个十六进制符号。

如果之前不是这样的话,您可能还需要自己管理 s1 的内存。

来源:
MK27's second answer
sprintf prototype

关于c - itoa 为字符输入提供 7 位输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38032755/

相关文章:

c - 如何用C语言编写加密函数

c - c 中的 freopen 和 execvp

c++ - 用 itoa 打印 BCD 值

c - 'itoa' : The POSIX name for this item is deprecated

itoa() 的 C++ 标准替代方法,用于将 int 转换为 base 10 char*

c++ - 格式化 : how to convert 1 to “01” , 2 到 “02” , 3 到 "03",等等

c++ - 每个函数和 ISR 是否都分配了自己的堆栈大小

c - 难以理解 c 中的 func(&_)

c - Eratosthenes 筛法 - 按位优化问题

c - ANSI C,没有可变参数函数的整数到字符串