大端格式、小段格式,以及数据在内存中的存储方式

论坛 期权论坛     
选择匿名的用户   2021-6-1 23:39   146   0
<h1 style="text-align:center"><span style="font-size:32px">大端格式、小</span><span style="font-size:32px">端</span><span style="font-size:32px">格式、数据在内存中的存储方式</span></h1>
<div>
<span style="font-size:32px"><br> </span>
</div>
<div>
<span style="font-size:32px"><br> </span>
</div>
<div style="text-align:left">
<span style="font-size:18px">内存中的地址.左→右,地址降低,下→上,地址升高。一个格子是一个字节,一个字节是8位。</span>
</div>
<div style="text-align:left">
<span style="font-size:18px">int a &#61; 0x01020304</span>
</div>
<div style="text-align:left">
<span style="font-size:18px"><br> </span>
</div>
<div style="text-align:left">
<span style="font-size:18px">若为大端格式(arm默认是小段格式):地地址存放高位</span>
<table border="1" cellpadding="1" cellspacing="1" width="200"><caption>
    内存格式
  </caption><tbody><tr><th>0x4001</th><th>0x4002</th><th>0x4003</th><th>0x4004</th></tr></tbody><tbody><tr><th>01</th><td>02</td><td>03</td><td>04</td></tr><tr><th> </th><td> </td><td> </td><td> </td></tr></tbody></table>
<h1 style="text-align:center"><br> </h1>
</div>
<div style="text-align:left">
<span style="font-size:18px"><span style="font-size:18px">小端格式</span><span style="font-size:18px; white-space:pre"></span><span style="font-size:18px">:x86、windows:低地址存放底位</span><br> <br> </span>
<table border="1" cellpadding="1" cellspacing="1" width="200"><caption>
    内存格式
  </caption><tbody><tr><th>0x4001</th><th>0x4002</th><th>0x4003</th><th>0x4004</th></tr></tbody><tbody><tr><th>04</th><td>03</td><td>02</td><td>01</td></tr><tr><th> </th><td> </td><td> </td><td> </td></tr></tbody></table>
<br>
</div>
<div style="text-align:left">
<span style="font-size:18px"><br> </span>
</div>
<div style="text-align:left">
<span style="font-size:18px">测试函数,我的linux是小端格式,下面请看程序</span>
</div>
<div style="text-align:left">
<span style="font-size:18px"><br> </span>
</div>
<div style="top:0px">
#include &lt;stdio.h&gt;
<br> #include &lt;stdlib.h&gt;
<br> #include &lt;inttypes.h&gt;
<br> #include &lt;string.h&gt;
<br>
<br> typedef struct led_reports_st {
<br>      char ch;
<br>      int it;
<br>      char string[3];
<br>      uint32_t serial_no;
<br> }node;
<br>
<br> node Node &#61; {0x01, 0x01020304, &#34;a&#34;, 32};
<br> int main ()
<br> {
<br>
<span style="white-space:pre"></span>int i;
<br>
<span style="white-space:pre"></span>char *p_char;
<br>
<span style="white-space:pre"></span>p_char &#61; (char *)&amp;Node;
<br>
<span style="white-space:pre"></span>for(i&#61;0; i &lt; sizeof(Node); i&#43;&#43;)
<br>
<span style="white-space:pre"></span>{
<br>
<span style="white-space:pre"></span>printf(&#34;a[%d]:%d\n&#34;, i, p_char[i]);
<br>
<span style="white-space:pre"></span>}
<br>
<span style="white-space:pre"></span>printf(&#34;sizeof(Node):%d\n&#34;, sizeof(Node));
<br>
<span style="white-space:pre"></span>printf(&#34;sizeof(uint32_t):%d\n&#34;, sizeof(uint32_t));
<br>
<span style="white-space:pre"></span>return 1;
<br> }
<br>
</div>
<div style="top:0px">
<br>
</div>
<div style="top:0px">
输出结果是:
</div>
<div style="top:0px">
a[0]:1
<br> a[1]:0
<br> a[2]:0
<br> a[3]:0
<br> a[4]:4
<br> a[5]:3
<br> a[6]:2
<br> a[7]:1
<br> a[8]:97
<br> a[9]:0
<br> a[10]:0
<br> a[11]:0
<br> a[12]:32
<br> a[13]:0
<br> a[14]:0
<br> a[15]:0
<br> sizeof(Node):16
<br> sizeof(uint32_t):4
<br>
</div>
<div style="top:0px">
<br>
</div>
<div style="top:0px">
可以看到a[4]-a[7]中的数据是04、03、02、01。所以是小端格式。
</div>
<div style="top:0px">
<br>
</div>
<div style="top:0px">
<br>
</div>
<div style="top:0px">
另外,该实例程序还展示了char指针的一种用途,将结构体转换成char指针,这样如果清楚struct的结构体和内存对齐格式,就可以直接使用数组读取结构体中的指定内容了。
</div>
<div style="top:0px">
指针是一种非常灵活的东西,需要多理解。
</div>
<div style="top:0px">
<br>
</div>
<div style="top:0px">
<br>
</div>
<div style="top:0px">
<br>
</div>
<div style="top:0px">
<h1 style="margin:0px; padding:0px; color:rgb(51,51,51); font-family:Arial; line-height:26px; text-align:center"> 详解大端模式和小端模式</h1>
<h1 style="margin:0px; padding:0px; color:rgb(51,51,51); font-family:Arial; line-height:26px"> <a name="t1" style="color:rgb(51,102,153)" target="_blank"></a><a name="t1" style="color:rgb(255,153,0)" target="_blank"></a><span style="font-size:18px">一、大端模式和小端模式的起源</span></h1>
<span style="color:rgb(51,51,51); font-family:Arial; line-height:26px; font-size:18px">        关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP