首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >itoa为字符输入提供7位输出。

itoa为字符输入提供7位输出。
EN

Stack Overflow用户
提问于 2016-06-25 20:36:28
回答 3查看 529关注 0票数 0

我试图使用C(gcc v-5.1)中的内置库( itoa )将一个字符转换为二进制,使用C中Char到二进制的转换中的例子,但是我得到了一个输入到itoa function.But的字符的7位输出,因为C中的一个字符本质上是一个8位整数,我应该得到一个8位output.Can,有人解释为什么会这样吗?

执行二进制转换的代码:

代码语言:javascript
复制
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上的第一个问题,很抱歉事先犯了任何错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-26 11:38:14

您可以使用printf( "%2X\n", *opt );打印一个8位值作为两个十六进制符号.

它将印刷第一张char of opt。然后,必须使用opt++;增加指向下一个字符的指针。

X表示要将其打印为大写十六进制字符(用x表示小写),并且2将确保它将打印2个符号,即使opt小于0x10

换句话说,值0xF将被打印为0x0F.(实际上是0F,您可以使用printf( "%#2X\n", *opt );打印0x)。

如果你绝对想要一个二进制值,你必须建立一个函数来打印正确的0和1。互联网上有很多这样的值。如果您想使用二进制操作,阅读按位操作可能会对您有所帮助(如果您想要使用二进制文件,则必须了解位操作)。

现在您可以按需要打印它(如上面所示的十六进制或使用您自己的二进制函数),您可以用printf函数重定向sprintf的输出。

它的原型是int sprintf( char* str, const char* format, ... )str是目的地。

在您的示例中,您只需要将strcat行替换为类似于sprintf( s1, "%2X\n", *opt);sprintf( s1, "%s\n", your_binary_conversion_function(opt) );的内容。

注意,使用前一种方法,您必须为s1中的每个char增加2,因为一个8位值是2个十六进制符号。

如果以前的情况不是这样的话,你也可能不得不独自管理s1的内存。

资料来源:

MK27 27的第二个答案

sprintf原型

票数 0
EN

Stack Overflow用户

发布于 2016-06-25 21:04:52

函数itoa接受要转换的值的int参数。如果您传递给它一个char类型的值,那么它将被提升为int.,那么函数如何知道您期望的前导零数?如果你要求基数10,你会期望多少前导零?实际上,它抑制了前导零点。

票数 0
EN

Stack Overflow用户

发布于 2016-06-25 21:38:34

请参见ASCII表,注意十六进制列,对于ASCII字符,msb为0。可打印的ASCII字符范围从0x200x7f。Unicode通过0x00 0x7f共享字符。

十六进制20乘7 f是二进制00100000乘01111111。

并非所有二进制值都是可打印的字符,在某些情况下,编码不是合法值。

ASCII、十六进制、八进制和二进制只是表示二进制值的方法。可打印字符是另一种方式,但并非所有二进制值都可以显示,这是需要显示或处理的主要数据,因为字符文本通常被转换为十六进制或Base64。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38032755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档