精华内容
下载资源
问答
  • C语言printf 打印十六进制数字0x01

    万次阅读 2014-11-18 10:43:17
    串口打印调试信息,有一段为输出十六进制地址的打印,%x输出显示为:0x1,而不是0x01,因此找到解决的方式如下:改为:%02x即可。 代码段如:  printf("\r\n 本机的标准ID号STDId:0x%02x",CAN_stdID);  ...


          串口打印调试信息,有一段为输出十六进制地址的打印,%x输出显示为:0x1,而不是0x01,因此找到解决的方式如下:改为:%02x即可。
    代码段如:


          printf("\r\n 本机的标准ID号STDId:0x%02x",CAN_stdID);
          printf("\r\n 目标主机的标准ID号STDId0:0x%02x",CAN_stdID0);




          串口输出内容为:
        本机的标准ID号STDId:0x14
        目标主机的标准ID号STDId0:0x01 




    (加入%02x 即可显示0x01,若没有02则显示0x1)

    展开全文
  • #include <xxxx.h> int main() { int a=12;... printf("十六进制 %x\n",a); printf("十进制 %d\n",a); char s[40];//要转换成的字符数组 itoa(a,s,2);//itoa转为二进制 printf("二进...

    #include <xxxx.h>
    int main()
    {
        int a=12;
        printf("八进制  %o\n",a);
        printf("十六进制 %x\n",a);
        printf("十进制 %d\n",a);
        char s[40];//要转换成的字符数组
        itoa(a,s,2);//itoa转为二进制
        printf("二进制 %s\n",s);//s就是你转换成的数组
        itoa(a,s,3);//转为三进制 
        printf("三进制 %s\n",s);
        return 0; 
     } 

    二进制打印用 itoa或下面函数

    void bprint(int p){
            int i=0;
            int bit1 = 1;
            for (i=sizeof (p) * 8-1;i>=0; i--){
                    unsigned int x = (((bit1<<i)&p) !=0);
                    printf("%d", x);
            }

            printf("\n");
    }


     

    展开全文
  • printf是格式化输出函数,它可以直接打印十进制,八进制,十六进制,输出控制符分别为%d, %o, %x, 但是它不存在二进制,如果输出二进制可以调用stdlib.h里面的itoa函数。 itoa函数原型为char*iota(int value,char *...

    printf是格式化输出函数,它可以直接打印十进制,八进制,十六进制,输出控制符分别为%d, %o, %x, 但是它不存在二进制,如果输出二进制可以调用stdlib.h里面的itoa函数。
    itoa函数原型为char*iota(int value,char *string,int radix);value为被转化的整数,string为转换后储存的字符数组,radix为要转换的进制数

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>//注意。itoa函数要包含这个头文件
    using namespace std;
    int main()
    {
        int a=12;
        printf("八进制  %o\n",a);
        printf("十六进制 %x\n",a);
        printf("十进制 %d\n",a);
        char s[40];//要转换成的字符数组
        itoa(a,s,2);//itoa转为二进制
        printf("二进制 %s\n",s);//s就是你转换成的数组
        itoa(a,s,3);//转为三进制 
        printf("三进制 %s\n",s);
        return 0; 
     } 
    展开全文
  • 对此我开始百度当十六进制打印char和unsigned char为什么它们得结果会不一样,然后就找到了自己想要的答案,对此,我想把我这次学到得知识记录在这里,供自己学习。我们先学习一下char和unsigned char的区别吧 char...

    以下代码是我做项目时,遇到的问题,我将以代码出现的问题,进行此次的总结。
    代码如下:

    /*********************************************************************************
     *      Copyright:  (C) 2020 makun<1394987689@qq.com>
     *                  All rights reserved.
     *
     *       Filename:  char.c
     *    Description:  This file 
     *                 
     *        Version:  1.0.0(2020年05月14日)
     *         Author:  makun <1394987689@qq.com>
     *      ChangeLog:  1, Release initial version on "2020年05月14日 18时30分44秒"
     *                 
     ********************************************************************************/
    #include <stdio.h>
    
    
    void dump_buf(char *buf, int bytes);
    
    int main (int argc, char **argv)
    {
    
        char buf[5]={0xfd,0xfe,0xff,0xff,0xff};
        dump_buf(buf, 5); 
        return 0;
    
    }
    //该函数是以十六进制打印buf数组中的值
    void dump_buf(char *buf, int bytes)
    {
        int    i;  
        for(i=0; i<bytes; i++)
        {   
            printf("0x%02x ", buf[i]);
            if( 0 == (i+1)%16 )
                printf("\n");
        }
        printf("\n");
    }
    
    

    预期结果:

    0xfd 0xfe 0xff 0xff 0xff

    实际结果:

    0xfffffffd 0xfffffffe 0xffffffff 0xffffffff

    下面图片为运行后的结果即是实际结果
    在这里插入图片描述
    这是我做项目遇到的一个问题,让我百思不得奇解,为什么会和我预想的不一样那?于是我就把项目中的这个问题拿出来单独测试,当我用实验室服务器写的时候它竟然跟预期的一样,代码跟如上一样,运行结果如下:
    在这里插入图片描述
    我就觉得这个问题是偶然得,有时候他会出现这样得错误,有时候不会出现这样得错误,前面得代码没问题,应该问题是出在用dump_buf函数以十六进制输出,当我用printf("0x%02x ",(unsigned char) buf[i]);输出时,这个问题就解决了。在这里插入图片描述
    对此我开始百度当十六进制打印char和unsigned char为什么它们得结果会不一样,然后就找到了自己想要的答案,对此,我想把我这次学到得知识记录在这里,供自己学习。我们先学习一下char和unsigned char的区别吧

    char和unsigned char的区别

    在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。

    在实际使用过程种有什么区别呢?

    主要是符号位,但是在普通的赋值,读写文件和网络字节流都没什么区别,反正就是一个字节,不管最高位是什么,最终的读取结果都一样,只是你怎么理解最高位而已,在屏幕上面的显示可能不一样。

    但是我们却发现在表示byte时,都用unsigned char,这是为什么呢?

    首先我们通常意义上理解,byte没有什么符号位之说,更重要的是如果将byte的值赋给int,long等数据类型时,系统会做一些额外的工作。

    如果是char,那么系统认为最高位是符号位,而int可能是16或者32位,那么会对最高位进行扩展(注意,赋给unsigned int也会扩展)而如果是unsigned char,那么不会扩展。

    对于上面这样的理解我想大家应该理解了吧 ,为什么当字节0xfd以有符号和无符号的char打印时值不一样了吧。当把char里的值以十六进制打印时,系统认为最高位是符号位, printf里隐含地做了一个char到int的转换,将扩充的位被填充成符号位,符号位为0和1,因为以十六进制所以打印的值为0xfffffffd,ff是十六进制而它的二进制是1111 1111 ,剩下两个ff的二进制也是一样的都被填充成了1.

    对于以上这个bug是偶然的,但是作为一个合格的程序员,应该在无论如何要注意这个细节上的问题,毕竟常言:细节决定成功,所以当我们写代码时遇到这种问题,一定要用unsigned char来打印数据。

    展开全文
  • 一,命令窗口打印调试信息 VS2019 + C语言 头文件 #include <stdio.h> #include <stdlib.h> 在int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow)...
  • printf是格式化输出函数,它可以直接打印十进制,八进制,十六进制,输出控制符分别为%d, %o, %x, 但是它不存在二进制,如果输出二进制,可以手写,但是也可以调用stdlib.h里面的itoa函数,他不是标准库里面的函数,...
  • 场景接收到Pelco-d协议中的七个字节报文,将每一个字节十六进制打印,有些字符自动添加ffffff测试代码#include <iostream>#include <fstream>#include <string>char szQueryPanPos[7] = { 0xff, ...
  • 编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列 1 template <typename T> 2 void displayHexBin(const T& v) 3 { 4 const unsigned char c2h[] = ...
  • 二进制利用位运算实现,十六进制利用printf实现。
  • 十六进制 字符打印

    千次阅读 2015-01-21 16:08:12
    printf打印字符的十六进制格式,需要unsigned char转换一下 printf("[%02x]\n",(unsigned char)str[i]); gdb打印16进制字符:p/x str[0] unsigned char **specificInfoH;  for(UINT32 i=0; isize...
  • 一、源码实现 为了适配各种数据类型,且可以通过sizeof得到此类型的...// 把十进制数(long型)分别以二进制和十六进制形式输出  template void displayHexBin(const T& v)  {   const unsigned char c2h[] =
  • #include <stdio.h> #include <tchar.h> #include <stdlib.h> char *str = "hello word";...int _tmain(int argc, _TCHAR* argv[]) ... printf("a = %d\r\n",a);...//打印十六进制形式 p
  • 1、八进制数是一种逢八进一的计数体制,基数是8,用0~7表示,如077。 2、八进制数以数字0开头。... 把数 a 分别 以十进制,八进制,十六进制形式 输出打印 printf("%d,%o,%x", a, a, a);//不显示数制前缀 p
  • 使用十六进制打印结构体的时候发现每次打印都是出来八个字符,如下: typedef struct temp{ int aa; long bb; }TEMP; void printMsg() { int i; TEMP message; char *fp = (char *)&message; for(i = ...
  • #include int main() ...printf("please enter a number:\n"); scanf("%d",&a); printf("the decimal number is:%d\n",a); int d=a; int b[50]={0} ,i=0; printf("the binary number is:"); f
  • //打印进制输出 1 int A = 9; 2 /*按整型输出,默认右对齐*/ 3 printf("%d\n",A); 4 /*按整型输出,补齐4位的宽度,补齐位为空格,默认右对齐*/ 5 printf("%4d\n",A); 6 /*按整形输出,补齐4位的宽度,补齐...
  • 我们都知道,在使用printf输出整数时,可以选择输出的进制形式。 (要注意的是,打印二进制数并没有... //十六进制 同样的,对于一个整型的变量,我们也可以用不同的进制形式给其赋初始值。 int a=0b100; //二进制
  • 浮点数转十六进制

    2020-06-03 17:02:06
    浮点数转十六进制 实现: float f = 123.45f; unsigned char *hex = (unsigned char *)&f; 打印输出: for(int i = 0; i < 4; i++) printf("0x%02X ", hex[i]); printf("\n"); 十六进制转浮点数 ...
  • 八进制,十六进制打印

    2018-02-08 16:00:00
    #include<stdio.h> int main() { int x=100;... printf("dec = %d; octal = %o; hex = %x\n",x,x,x); printf("dec = %d; octal = %#o; hex = %#x\n",x,x,x);//#显示前缀0 return 0; } ...
  • 八进制以0开头,十六进制以0X或0x开头,即使你使用%d打印,编译器也会认为你输入的是八进制。 比如我们输入020。 int x=020; printf("%d,%o,%x\n",x,x,x);输出的结果是: 16,20,10 如果输入的是 int x=20; ...
  • 二进制: int a=0b101; 八进制: int a = 014; 十六进制: int a = 0x8; float a =8.99; printf(”%2.1f“,a); 表示打印两位位宽,保留小时位 一位
  • 在方括号[]中的项为可选项:(1)类型类型字符用以表示输出数据的类型d 以十进制形式输出带符号整数(正数不输出符号)o 以八进制形式输出无符号整数(不输出前缀0)x,X 以十六进制形式输出无符号整数(不输出前缀Ox)u 以十...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 342
精华内容 136
关键字:

printf打印十六进制