C++中int类型按字节打印输出的方法

 更新时间:2019年05月09日 08:30:15   作者:shell_nut  
这篇文章主要给大家介绍了关于C++中int类型按字节打印输出的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

今天在项目编程中,遇到一个问题,u32类型的参数,要赋值给一个u8 array[3],想用memcpy()函数进行赋值,由于类型大小不一致,一时不知道怎么做,经过查找,得以解决。说明如下;

项目是在内网中做,在查找过程中用自己笔记本做了一下实验,vs2013版本。

类似主题是int类型按字节打印数据,sizeof(int)实验验证后为4字节,就分别打印出这4个字节中的数值。

先贴上代码

#include<iostream>
using namespace std;

int main()
{
  int i = 128;
  
  cout << sizeof(int) << endl;

  unsigned char* cc = (unsigned char*)&i;

  for (int j = 0; j < 4; j++)
    printf("cc: %p \t *cc: %x\n", cc + j, *(cc + j));
  
  system("pause");
  return 0;
}

输出:


以上是正确代码

以下对代码做改变

unsigned char* cc = (unsigned char*)&i;
改为
 char* cc = ( char*)&i;

 //代码如下:
#include<iostream>
using namespace std;

int main()
{
  int i = 128;
  
  cout << sizeof(int) << endl;

   char* cc = ( char*)&i;

  for (int j = 0; j < 4; j++)
    printf("cc: %p \t *cc: %x\n", cc + j, *(cc + j));
  
  system("pause");
  return 0;

输出:

输出为什么是ffffff80呢?

char类型是有符号字符型变量还是无符号字符型变量,要看编译器是怎么定义的,不能想当然。char变量为一个字节,8bit,sighed char表示的范围是-128~127,(-128在内存中二进制表示为1000 0000,127在内存中二进制表示为0111 1111),unsighed char表示的范围是0~255.

给 i 赋值128,十六进制0x80,二进制1000 0000,相当于是给char变量赋值-128.

printf()函数的参数%x其含义为Unsigned hexadecimal integer;即输出一个十六进制的整型,而在代码中,%x对应的是char类型,所以此时printf()函数会将char类型隐式转换为int类型。

对于int类型的对象,其值为-128,则其对应的内存值是0xFFFFFF80

所以,在printf()函数中,char类型隐式转换成int类型后,输出就会变成4字节的0xFFFFFF80

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • C++类URL编码和解码使用技巧

    C++类URL编码和解码使用技巧

    在项目开发过程中,经常会使用到c++ 的url编码和解码,本文将以此问题详细介绍使用技巧,需要的朋友可以参考下
    2012-11-11
  • 一起来了解c语言的str函数

    一起来了解c语言的str函数

    这篇文章主要为大家详细介绍了c语言的str函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C++中两种字符串定义方式和区别介绍

    C++中两种字符串定义方式和区别介绍

    大家好,本篇文章主要讲的是C++中两种字符串定义方式和区别介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C语言菜鸟基础教程之自定义函数

    C语言菜鸟基础教程之自定义函数

    自定义函数: 必须直接或间接在main中调用,否则该自定义函数不会被执行。 返回值类型 函数名(参数类型 参数名,参数类型 参数名...)
    2017-10-10
  • C++移除序列中连续重复的特定值示例代码

    C++移除序列中连续重复的特定值示例代码

    这篇文章主要给大家介绍了关于在C++中如何移除序列中连续重复的特定值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • C语言实现 数据类型占多少字节指针占多少字节

    C语言实现 数据类型占多少字节指针占多少字节

    这篇文章主要介绍了 C语言 数据类型占多少字节指针占多少字节的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • HDOJ 1443 约瑟夫环的最新应用分析详解

    HDOJ 1443 约瑟夫环的最新应用分析详解

    本篇文章是对HDOJ 1443 约瑟夫环的最新应用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 探讨register关键字在c语言和c++中的差异

    探讨register关键字在c语言和c++中的差异

    建议不要用register关键字定义全局变量,因为全局变量的生命周期是从执行程序开始,一直到程序结束才会终止,而register变量可能会存放在cpu的寄存器中,如果在程序的整个生命周期内都占用着寄存器的话,这是个相当不好的举措
    2013-10-10
  • 字符串的模式匹配详解--BF算法与KMP算法

    字符串的模式匹配详解--BF算法与KMP算法

    这篇文章记录一下串里面的模式匹配,模式匹配,顾名思义就是给定一个被匹配的字符串,然后用一个字符串模式(模型)去匹配上面说的字符串,看后者是否在前者里面出现。常用的有2种算法可以实现,下面我们来具体探讨下
    2014-08-08
  • C++超详细讲解强制类型转换

    C++超详细讲解强制类型转换

    在C++语言中新增了四个关键字static_cast、const_cast、reinterpret_cast和dynamic_cast。这四个关键字都是用于强制类型转换的
    2022-05-05

最新评论