c++输出lpbyte类型_6.1数据类型

C语言的类型

  • 整数
    • char、short、int、long、long long
  • 浮点数
    • float、double、long double
  • 逻辑
    • bool
  • 指针
  • 自定义类型

类型有何不同

  • 类型名称:int、long、double
  • 输入输出时的格式化:%d、%ld、%lf
  • 所表达的数的范围:char<short<int<float<double
  • 内存中所占据的大小:1个字节到16个字节
  • 内存中的表达形式:二进制数(补码)、编码

sizeof

  • 是一个运算符,给出某个类型或变量在内存中所占据的字节数
    • sizeof(int)
    • size(i)
  • 是静态运算符,它的结果在编译时刻就决定了
  • 不要在sizeof的括号里做运算,这些运算不会做的

整数

  • char:1字节(8比特) -128~127
  • short:2字节 -32768~32767
  • int:取决于编译器(CPU),通常意义是”1个字“
  • long:取决于编译器(CPU),通常意义是”1个字“
  • long long :8字节

unsignned

  • 如果一个字面量常数想要表达自己是unsigned,可以在后面加u或U
    • 255U
  • 用I或L表示long(long)
  • *unsigned的初衷并非扩展数能表达的范围,而是为了做纯二进制运算,主要是为了移位

整数的输入输出

  • 只有两种形式:int或long long
    • %d:int
    • %u:unsigned
    • %ld:long long
    • %lu:unsigned longlong

8进制和16进制

  • 一个以0开始的数字字面量是8进制
  • 一个以0x开始的数字字面量是16进制
  • %0用于8进制,%x用于16进制
  • 8进制和16进制只是如何把数字表达为字符串,与内部如何表达数字无关
  • 16进制很适合表达二进制数据,因为4位二进制正好是一个16进制位
  • 8进制的一位数字正好表达3位二进制

选择整数类型

  • 没有特殊需要就选择int

浮点类型

720814c09bf233abf73fc55948a5062d.png

浮点的输入输出

e39977b1655dfd4e48c89f747213b999.png

输出精度

  • 在%和 f之间加上.n可以指定输出小数点后几位,这样的输出是做4舍5入的
    • printf("%.3fn",-0.0049)
    • printf("%.30fn",-0.0049)
    • printf("%.3fn",-0.00049)

超过范围的浮点数

  • printf输出inf表示超出范围的浮点数:+-无穷
  • printf输出nan表示不存在的浮点数

浮点运算的精度

  • 带小数点的字面量是double而非float
  • float需要用f或F后缀来表明身份

选择浮点类型

  • 没有特殊需要,只使用double
  • 现在CPU能直接对double做硬件运算,性能不会比float差,在64位的机器上,数据存储的速度也不比float慢

字符类型

  • char是一种整数,也是一种特殊字符:字符。这是因为:
    • 用单引号表示的字符字面量:‘a’,‘1’
    • ‘’也是一个字符
    • printf和scanf里用%c来输入和输出字符

字符的输入输出

  • 如何输入'1'这个字符给char c?

scanf("%C",&C); scanf("%d",&i); c=i

  • '1'的ASCII码是49,所以当c==49时,他代表'1'

逃逸字符

  • 用来表示无法印出的控制字符或特殊字符,它由一个反斜杠" "开头,后面跟上另一个字符,这两个字符合起来,组成了一个字符

1ada8d931972e68c11504218491b886b.png

自动类型转换

  • 当运算符的两边出现不一致的类型时,会自动转换成较大的类型
    • 大的意思是能表达的数的范围更大
    • char-short-int-long-long-long
    • int-float-double
  • 对于printf,任何小于int的类型会被转换成int;float会被转换成double
  • 但是scanf不会,要输入short,需要%hd

强制类型转换

  • 要把一个量强制转换成另一个类型(通常是较小的类型),需要:
    • (类型)值
      • 比如:
      • (int)10.2
      • (short)32
  • 注意这时候的安全性,小的变量不总能表达大的量
    • (short)32768
  • 只是从那个变量计算出了一个新的类型的值,它并不改变那个变量,无论是值还是类型都不改变
  • 强制类型转换的优先级高于四则运算
    • c double a = 1.0; double b = 2.0; int i = (int)a/b; int i =(int)(a/b);

6.2其他运算

bool

  • c #include <stdbool.h>
  • 之后就可以使用bool和true、false

逻辑运算

  • 逻辑运算是对逻辑量进行的运算,结果只有0或1
  • 逻辑量是关系运算或逻辑运算的结果

7e1d150a5add179536d73d48ad9fb06e.png
  • 如果要表达数学中的区间,x>4&&x<6
  • 判断一个字符c是否是大写字母
    • c>='A'&& c<='Z'
  • 优先级
    • !>&&>||
C++ 中,`LPBYTE` 是一个指向字节数据的指针类型,它通常用于处理二进制数据。`LPBYTE` 实际上是 `unsigned char*` 的别名。 当你将 `LPBYTE` 指针传递给输出或者打印函时,它会将指针解释为一个字符组,并尝试将其作为字符串输出。这可能导致乱码或者不正确的输出,因为 `LPBYTE` 指针通常不是以零结尾的字符串。 如果你想要正确处理二进制数据,可以使用 `LPBYTE` 指针的内容进行操作,而不是将其作为字符串输出。你可以使用循环逐个打印或处理每个字节,或者使用其他适当的函来处理二进制数据。 以下是一个示例,演示如何正确处理 `LPBYTE` 指针的二进制数据: ```cpp #include <iostream> #include <iomanip> #include <Windows.h> void printBytes(LPBYTE data, DWORD size) { for (DWORD i = 0; i < size; i++) { std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)data[i] << " "; } std::cout << std::dec << std::endl; } int main() { LPBYTE lpData = new BYTE[5]; lpData[0] = 0x41; // A lpData[1] = 0x42; // B lpData[2] = 0x43; // C lpData[3] = 0x44; // D lpData[4] = 0x45; // E printBytes(lpData, 5); delete[] lpData; return 0; } ``` 在上述示例中,我们使用了 `printBytes` 函来以十六进制格式打印 `LPBYTE` 指针的内容。这样可以正确显示二进制数据,而不会产生乱码。 希望这个示例能够帮助你正确处理 `LPBYTE` 指针的二进制数据。如果你有其他问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值