导航:首页 > 源码编译 > 怎么查看编译环境是否为小端模式

怎么查看编译环境是否为小端模式

发布时间:2022-02-01 18:54:51

编译环境中的大小端

常用在嵌入式开发中以适应目标系统
大端:MSB,数据高字节放在高地址,低字节放在低地址
小端:LSB,与MSB相反
X86架构为LSB
ARM MSB,LSB均可,通过片外逻辑确定

㈡ 编译器能指定大小端么

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中
小端模式,是指数据的高字节保存在内存的高地址中
而数据的低字节保存在内存的低地址中
上面c是一个共用体,给共用体中的a赋值为1.然后读取b是否为1,当b为1是说明是小端模式,b为0则说明是大端模式。

㈢ 如何看linux是否为c++编译环境

我这里提出的开发环境的只是我个人喜欢的,并不一定是最好的,仅供参考。以下都以我的系统为准: Fedora Core2, gnome。 1:linux下的 软件安装。 在linux下安装有两种方法:自己编译源代码安装和用RPM安装。一般软件都提供了RPM包下载。

㈣ 怎样判断处理器或者编译器大小端对其的方法


16bit的机器诞生后,数据的存放也是按照字节为单位的,也是8bit位,这时候的问题就来了,过去8bit机器是一个地址一个字节,现在一个地址可以存放2个字节的数据了,其中该地址又分为高8位和低8位,2个字节怎么分配到高8和低8,这是一个选择题。于是2中流派就产生了,数据的逻辑低存到低8,逻辑高存到高8;或者是数据的逻辑低存到高8,逻辑高存到低8.用具体的数

㈤ 大端模式、小端模式和MSB、LSB是一个概念吗两者有何区别

在网络通信方面,大家说的更多的 是:“Big-Endian”和“Small-Endian”的问题。
指的都是对于多字节的数据类型(比如4字节的32位整数),其多个字节的顺序问题,是最高字节在前(Big-Endian)还是最低字节在前 (Small-Endian)。
比如对于123456789这个整数,其16进制为0x075BCD15,那么按照Big-Endian的方式,它在网络上传输(或者在内存里存储)的4 个字节依次是:07 4B CD 15,而Small-Endian的顺序正相反,是:15 CD 4B 07。

MSB 和LSB 虽然跟这个事情看起来有点相似,但不是一回事。通常,一个芯片的管脚中,对于一个多 比特的信号,比如32根的地址线,从低开始按0到31编个号。MSB 就是31,LSB 就 是0。那么如果标记为:ADDR[31:0]就是MSB first的方式,如果标记为ADDR[0:31]就是LSB first的方式。

㈥ 虚拟机linux怎么查看交叉编译环境

1.安装源码编译环境(配置gcc),在ubuntu安装完成已经有gcc(gcc是由GNU之父Stallman所开发的linux下的编译器,全称为GNU Compiler Collection, 目前可以编译的语言包括:C, C++, Objective-C, Fortran, Java, and Ada.),但是gcc还不能编译文件,因为缺少一些头文件.那么我们就要来配置这些头文件。在这里我们需要安装build-essential这个软件包,安装了这个包会自动安装上g++,libc6-dev,linux-libc-dev,libstdc++6-4.1-dev等一些必须的软件和头文件的库。安装build-essential,你可以在新立得搜索然后安装或者在终端里输入:
sudo apt-get install build-essential

2.除了编辑器之外,我们还需要文本编辑器来编写程序源码,Ubuntu中其实已自带编辑器,但是目前较为着名而且流行的vi / vim 编辑器可以通过在Ubuntu的软件中心下载,或是在终端输入指令下载,指令如下:
sudo apt-get install vim-full

3.解压包:arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2,(注:不同文件包类型,指令有区别,如bz2 -xf)如下指令:
sudo tar -xf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 OR sudo tar -xf arm-linux-gcc-3.4.6-glibc-2.3.6.tgz -C /work/

我的Ubuntu使用第二个指令解压后解压包放在了work目录下。

4.修改环境变量,把交叉编译器的路径加入到PATH:方法一:修改/etc/bash.bashrc文件(此文件只对当前用户适用),指令如下:
sudo gedit /etc/bash.bashrc
然后在文件的末尾空白处加入一下代码:
if [ -d /work/gcc-3.4.6-glibc-2.3.6 ] ; then
PATH=/work/gcc-3.4.6-glibc-2.3.6/arm-linux/bin:"${PATH}"
fi
即完成路径的添加。

5.使新的环境变量生效,不用重启电脑。输入下面指令:
source /etc/bash.bashrc
6.检查是否将路径加入到PATH。输入下面指令:

echo $PATH
若显示的内容中含有:/usr/local/arm/4.3.2/bin 说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。

7. 测试是否安装成功,下面的命令会显示arm-linux-gcc信息和版本。

㈦ 大小端模式的简介

所谓的大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
例子:
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000
在大端模式下,前32位应该这样读: e6 84 6c 4e ( 假设int占4个字节)
记忆方法: 地址的增长顺序与值的增长顺序相同 所谓的小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
例子:
0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000
0000440: b484 6c4e 004e ed00 0000 0000 0100 0000
在小端模式下,前32位应该这样读: 4e 6c 84 e6( 假设int占4个字节)
记忆方法: 地址的增长顺序与值的增长顺序相反 对于0x11223344 储存如下
下面这段代码可以用来测试一下你的编译器是大端模式还是小端模式:
short int x;
char x0,x1;
x=0x1122;
x0=((char*)&x)[0]; //低地址单元
x1=((char*)&x)[1]; //高地址单元
若x0=0x11,则是大端; 若x0=0x22,则是小端......
上面的程序还可以看出,数据寻址时,用的是低位字节的地址。 #definesw16(x)((short)((((short)(x)&(short)0x00ffU)<<8)|(((short)(x)&(short)0xff00U)>>8)))

㈧ 如何查看linux环境的大小端

不同机器内部对变量的字节存储顺序不同,有的采用大端模式(big-endian),有的采用小端模式(little-endian)。 大端模式是指高字节数据存放在低地址处,低字节数据放在高地址处。 小端模式是指低字节数据存放在低地址处,高字节数据放在高地址处。...

㈨ 如何判断CPU是大端模式还是小端模式

大端模式和小端模式与处理器没关系,是编译器的怎么处理的。看看编译器的设置里面,一般都有相关的选项,即使编译器没有选项供选择,编译器的说明书中也会介绍。
想测试的话,最简单的是做个小程序,定义一个整形或长整形的变量,从调试环境中看一下这个变量就知道了。

㈩ 大小端模式的判断处理器

通过下列的程序可以确认在某个硬件平台上的某个操作系统是大端还是小端:
VB6: '注意这个CopyMemory的声明与一般的不一样,'一般的都是(pDstAsAny,pSrcAsAny,ByValByteLenAsLong)'为了能够逐字节访问u,所以前面两个参数改成了按值传递,配合VarPtr函数获取变量地址_RtlMoveMemory(ByValpDstAsLong,ByValpSrcAsLong,ByValByteLenAsLong)PrivateSubForm_Load()'VB的Integer占用2个字节!Long才是4个字节'32位应用程序的指针是4个字节sLong'储存u从低地址到高地址的4个字节=367328153'十六进制数:15E4FB99uptr=VarPtr(u)'VarPtr函数是内置函数,但是msdn不说,作用是获取变量的地址aptr=VarPtr(a)bptr=VarPtr(b)cptr=VarPtr(c)dptr=VarPtr(d)CopyMemoryaptr,uptr+0,1'将u逐字节按顺序写入a,b,c,dCopyMemorybptr,uptr+1,1CopyMemorycptr,uptr+2,1CopyMemorydptr,uptr+3,1'Windows系统,英特尔处理器:最后输出的是99FBE415MsgBoxHex(a)&&Hex(b)&&Hex(c)&&Hex(d)EndSub在英特尔处理器,Windows10操作系统上,对话框显示的结果是99 FB E4 15,与直接求出来的16进制值15 E4 FB 99正好相反,所以是小端的。
C++语言(VS2013下,控制台项目): #include<iostream>usingnamespacestd;typedefunsignedcharbyte;//转换char(视为整数类型)为16进制字符串voidChtoHex(byteVal,char*dest){//辗转相除法,倒序看得到结果bytetmp=Val%16;if(tmp>=0&&tmp<=9){dest[1]='0'+tmp;}elseif(tmp>=10&&tmp<=15){dest[1]='A'+tmp-10;}tmp=(Val/16)%16;if(tmp>=0&&tmp<=9){dest[0]='0'+tmp;}elseif(tmp>=10&&tmp<=15){dest[0]='A'+tmp-10;}//设置''dest[2]='';}//主函数intmain(){intu=367328153;//原始数据,8位16进制为15E4FB99bytea,b,c,d;//u从低地址到高地址的四个字节//a~d对应的16进制字符串,预留3个字符charSa[3],Sb[3],Sc[3],Sd[3];byte*k=(byte*)&u;a=k[0];b=k[1];c=k[2];d=k[3];//转成16进制字符串ChtoHex(a,Sa);ChtoHex(b,Sb);ChtoHex(c,Sc);ChtoHex(d,Sd);cout<<Sa<<<<Sb<<<<Sc<<<<Sd<<endl;system(pause);return0;}在英特尔处理器,Windows10操作系统上,控制台显示的结果是99 FB E4 15,与直接求出来的16进制值15 E4 FB 99正好相反,所以也证明是小端的。
C语言(VC++6.0,控制台工程): #include<stdio.h>typedefunsignedcharbyte;//转换char(视为整数类型)为16进制字符串voidChtoHex(byteVal,char*dest){//辗转相除法,倒序看得到结果bytetmp=Val%16;if(tmp>=0&&tmp<=9){dest[1]='0'+tmp;}elseif(tmp>=10&&tmp<=15){dest[1]='A'+tmp-10;}tmp=(Val/16)%16;if(tmp>=0&&tmp<=9){dest[0]='0'+tmp;}elseif(tmp>=10&&tmp<=15){dest[0]='A'+tmp-10;}//设置dest[2]='';}//主函数voidmain(){intu=367328153;//原始数据,8位16进制为15E4FB99bytea,b,c,d;//u从低地址到高地址的四个字节//a~d对应的16进制字符串,预留3个字符charSa[3],Sb[3],Sc[3],Sd[3];byte*k=(byte*)&u;a=k[0];b=k[1];c=k[2];d=k[3];//转成16进制字符串ChtoHex(a,Sa);ChtoHex(b,Sb);ChtoHex(c,Sc);ChtoHex(d,Sd);printf(%s%s%s%s ,Sa,Sb,Sc,Sd);scanf_s(%d,&a);}在英特尔处理器,Windows10操作系统上,结果跟上面是一样的,输出的16进制数是反序的,证明是小端系统。
C#(VS2013下,控制台项目): usingSystem;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){intu=367328153;//原始数据,8位16进制为15E4FB99byte[]bytes;//u从低地址到高地址的四个字节//获取bytes=System.BitConverter.GetBytes(u);Console.WriteLine(bytes[0].ToString(X)++bytes[1].ToString(X)++bytes[2].ToString(X)++bytes[3].ToString(X));Console.ReadLine();}}}在英特尔处理器,Windows10操作系统上,结果跟上面还还是一样的,输出的16进制数是反序的,证明是小端系统。
MDK(Keil5,STM32F407)C语言: #includestm32f4xx.hintmain(void){intu=367328153;//原始数据15E4FB99int*k=&u;return0;}编译连接然后下载到开发板上,然后启动调试,通过监视窗口可以看到u的地址,然后在内存窗口可以看到字节序是反序的,所以说明STM32F407是小端的。据某些资料说ARM内核是可以设置大小端的,但是STM32是外设自动进入了小端,似乎是无法调整的。

89C52(Keil5)C语言:
最后来一个大端的例子。手头上没有51的开发板,所以用的是软件仿真。 #include<reg52.h>intmain(){intlongbit=sizeof(long);longu=367328153;//原始数据15E4FB99long*k=&u;return0;}注意看了,C52是8位的处理器,long才是4个字节的,看监视窗口longbit的值就知道了(紫色框)。然后再看内存窗口,就会发现u的存储是跟原始数据给的顺序是一样的,所以C51和C52是大端的!!

阅读全文

与怎么查看编译环境是否为小端模式相关的资料

热点内容
app怎么查看自己的主域名 浏览:638
欧洲银行加密币市场 浏览:858
linuxc编程高级 浏览:731
python解码vip视频 浏览:592
丑陋的中国人pdf 浏览:717
我的世界如何在服务器里面装模组 浏览:622
javaweb进销存源码下载 浏览:556
单片机遥控门铃设计图解 浏览:324
闪送app怎么更改照片 浏览:160
公司的程序员开始忙了 浏览:506
统信系统命令行如何输汉字 浏览:279
java随机取数组 浏览:477
服务器匆忙什么意思 浏览:780
windows下载文件命令 浏览:101
绍兴加密防伪技术 浏览:54
linux清除缓存的命令 浏览:779
梁柱连接处梁的加密箍筋 浏览:103
安卓录屏大师如何弹出 浏览:658
cad命令详解 浏览:173
品牌云服务器提供商 浏览:326