• 《windows程序设计》笔记


    1.要定义包含一个宽字符的变量,可使用下面的语句: 

    wchar_t c = 'A'             

    变量c是一个双字节值0x0041,是Unicode表示的字母A。(然而,因为Intel微处理器从最小的字节开始储存多字节数值,该字节实际上是以0x41、0x00的顺序保存在内存中。)


    指向宽字符的指针: wchar_t * pw = L"Hello!"          

    再次调用strlen : iLength = strlen (pw)             

    现在麻烦来了。首先,C编译器会显示一条警告消息,可能是这样的内容: 'function' : incompatible types - from 'unsigned short *' to 'const char *'  这条消息的意思是:声明strlen函数时,该函数应接收char类型的指标,但它现在却接收了一个unsigned short类型的指标。您仍然可编译并执行该程序,但您会发现iLength等于1。为什么?  

    字符串「Hello!」中的6个字符占用16位:  0x0048 0x0065 0x006C 0x006C 0x006F 0x0021  

    Intel处理器在内存中将其存为:  48 00 65 00 6C 00 6C 00 6F 00 21 00

    假定strlen函数正试图得到一个字符串的长度,并把第1个字节作为字符开始计数,但接着假定如果下一个字节是0,则表示字符串结束。


    2.内存存储

    图一



    图二

    例一

    		std::cout<<sizeof(short)<<std::endl;
    
    		unsigned short us = 0xE5F6;
    		unsigned char *c = (unsigned char*)&us;
    
    		for(int i = 0; i < sizeof(short); ++i, ++c)
    			printf("0x%p : 0x%02x
    ", c, *c);
    结果



    例二

    		std::cout<<sizeof(int)<<std::endl;
    
    		unsigned int ui = 0xA1B2C3D4;
    		unsigned char *c = (unsigned char*)&ui;
    		for(int i = 0; i < sizeof(int); ++i, ++c)
    			printf("0x%p : 0x%02x
    ", c, *c);
    结果



    例三

    		unsigned int ui[2];
    		ui[0] = 0xA1B2C3D4;
    		ui[1] = 0xE5F60102;
    		unsigned char *c = (unsigned char*)&ui;
    		for(int i = 0; i < 8; ++i, ++c)
    			printf("0x%p : 0x%02x
    ", c, *c);
    结果



    结论:

    存储特点:位置从上到下、地址从低到高口诀:天上人间、剑法

  • 相关阅读:
    驴的故事
    leetcode125. Valid Palindrome
    C#处理Excel的帮助类
    用SVN进行团队开发协作生命周期详解
    .net反编译原理
    科学使用Log4View2查看日志
    NLog日志框架使用探究-2
    NLog日志框架使用探究-1
    从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)
    十分钟学会 Markdown 基本语法
  • 原文地址:https://www.cnblogs.com/chaikefusibushiji/p/7475629.html
Copyright © 2020-2023  润新知