二进制安全_C语言中数据类型

1、C语言中的数据类型:

 

二进制安全_C语言中数据类型

 

2、学习数据类型的三个要素:

 

1、存储数据的宽度

2、存储数据的格式

3、作用范围(作用域)

 

3、整数类型:char short int long


char 8BIT 1字节

short 16BIT 2字节

int 32BIT 4字节

long 32BIT 4字节

 

#include "stdafx.h"
void Plus(){
    char A =0xFF;
    short B = 0xFF;
    int C = 0xFF;
    //在一个大括号里变量不能重复
}

int main(int argc, char* argv[])
{
    Plus();
    return 0;
}

 

 void Plus(){
00401020   push        ebp
00401021   mov         ebp,esp
00401023   sub         esp,4Ch
00401026   push        ebx
00401027   push        esi
00401028   push        edi
00401029   lea         edi,[ebp-4Ch]
0040102C   mov         ecx,13h
00401031   mov         eax,0CCCCCCCCh
00401036   rep stos    dword ptr [edi]
7:        char A =0xFF;
00401038   mov         byte ptr [ebp-4],0FFh    //局部变量
8:        short B = 0xFF;
0040103C   mov         word ptr [ebp-8],offset Plus+20h (00401040)
9:        int C = 0xFF;
00401042   mov         dword ptr [ebp-0Ch],0FFh
10:       //在一个大括号里变量不能重复
11:   }
00401049   pop         edi
0040104A   pop         esi
0040104B   pop         ebx
0040104C   mov         esp,ebp
0040104E   pop         ebp
0040104F   ret

二进制安全_C语言中数据类型

 

 有符号和无符号:在内存中存储是完全一样的,在使用的时候,要告诉计算机是当什么用。类型转换--比较大小和数学运算

#include "stdafx.h"

void Plus(){
    char i =0xff;
    unsigned char a=0xff;    //无符号和无符号 存的是一样   
}

int main(int argc, char* argv[])
{
    Plus();
    return 0;
}

 

 二进制安全_C语言中数据类型

 

 4、浮点类型:float double

7:        float i =12.5;
00401038   mov         dword ptr [ebp-4],41480000h   

 

float和double在存储方式上都是遵从IEEE的规范的

二进制安全_C语言中数据类型

 

 二进制安全_C语言中数据类型

将一个float型转化为内存存储格式的步骤为:

1、先将这个实数的绝对值化为二进制格式

2、将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。

3、从小数点右边第一位开始数出二十三位数字放入第22到第0位。

4、如果实数是正的,则在第31位放入“0”,否则放入“1”。

5、如果n 是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。

6、如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。
如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。

二进制安全_C语言中数据类型

 二进制安全_C语言中数据类型

二进制安全_C语言中数据类型

 

二进制安全_C语言中数据类型

 二进制安全_C语言中数据类型

二进制安全_C语言中数据类型

 

7: float i =0.25F;
00401038 mov dword ptr [ebp-4],3E800000h

 二进制安全_C语言中数据类型

-2-1=-3 ,FF -1   FE -2  FD -3 

FD = 1111 1101

 0011 1110 1000 0000 0000 0000 0000 0000

3E8000

 

5、英文字符存储

ASCII:

1、ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。

2、标准 ASCII 码使用 7 位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号,以及在美式英语中使用的特殊控制字符。

3、扩展 ASCII 码允许将每个字符的第 8 位用于确定附加的 128 个特殊符号字符、外来语字母和图形符号。

 

标准ASCLL码表截取:

二进制       十进制 十六进制     字符                      
0100 0001    65        41            A                      
0100 0010    66        42            B                      
0100 0011    67        43            C                      
0100 0100    68        44            D                      
0100 0101    69        45            E                      
0100 0110    70        46            F                     
0100 0111    71        47            G                      
0100 1000    72        48            H                      
0100 1001    73        49            I                      
0100 1010    74        4A            J                      
0100 1011    75        4B            K                      
0100 1100    76        4C            L                      
0100 1101    77        4D            M                      
0100 1110    78        4E            N                      
0100 1111    79        4F            O                      
0101 0000    80        50            P                      
0101 0001    81        51            Q                      
0101 0010    82        52            R                      
0101 0011    83        53            S                      
0101 0100    84        54            T                      
0101 0101    85        55            U                      
0101 0110    86        56            V                      
0101 0111    87        57            W                      
0101 1000    88        58            X                      
0101 1001    89        59            Y                      
0101 1010    90        5A            Z         

二进制安全_C语言中数据类型

6、中文字符存储

计算机发明之处及后面很长一段时间,只用应用于美国及西方一些发达国家,ASCII能够很好满足用户的需求。
但是当天朝也有了计算机之后,为了显示中文,必须设计一套编码规则用于将汉字转换为计算机可以接受的数字系统的数。

天朝专家把那些127号之后的奇异符号们(即EASCII)取消掉,规定:一个小于127的字符的意义与原来相同,
但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节
(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。

在这些编码里,还把数学符号、罗马希腊的 字母、日文的假名们都编进去了,连在ASCII里本来就有的数字、标点、字母都
统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。

上述编码规则就是GB2312或GB2312-80

二进制安全_C语言中数据类型

 

上一篇:C函数调用过程原理及函数栈帧分析(转)


下一篇:FirstPayload