[C/C++]_[初级]_[判断大小端序Little Endian Order]

场景:

1. 在读取硬盘数据和媒体数据时,需要根据读取的数据进行大小端序的转换,以正确识别数据。其中一个处理就是首先要判断cpu支持的大小端序情况才能转换.

2. Little Endian Order: 低地址存低位(整数的高低位)的数据.

test.cpp

#include <stdio.h>
#include <iostream>

using namespace std;

//1.方法1,通过判断int的低位是否存储了数值.
int IsLittleEndian1()
{
    int x = 1;
    if (*(char*) &x == 1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//1.方法2,使用union的特性判断低位的int值
int IsLittleEndian2()
{
	union w
	{
		int a;
		char b;
	}w1;

	w1.a = 1;
	return (w1.b == 1);
}

int main(int argc, char const *argv[])
{
	cout << "IsLittleEndian1:.................." << endl;
	if(IsLittleEndian1())
	{
		cout << "Little Endian Order" << endl;
	}else
	{
		cout << "Big Endian Order" << endl;
	}
	cout << "IsLittleEndian2:.................." << endl;
	if(IsLittleEndian2())
	{
		cout << "Little Endian Order" << endl;
	}else
	{
		cout << "Big Endian Order" << endl;
	}

	return 0;
}

输出:

IsLittleEndian1:..................
Little Endian Order
IsLittleEndian2:..................
Little Endian Order
时间: 2024-10-03 06:49:23

[C/C++]_[初级]_[判断大小端序Little Endian Order]的相关文章

判断大小端序的C程序

概念 大端格式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中. 小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节. 如5A6C中5A是高字节.6C是低字节,在大端序机器中,高字节位于低地址中,即在大端序中按照5A6C存储,在小端序中按照6C5A存储. 为什么存在这种模式 因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit.但是在C语言中除了8bit的char之外,还有16bit的

C++如何判断大小端

http://bbs.chinaunix.net/thread-1257205-1-1.html #include <stdio.h>#include <string.h>#include <stdlib.h> int main(void){        unsigned short v = 0x0102;        unsigned char *p = (unsigned char *)&v; if (*p == 0x01)               

判断大小端的方法(java和c++)

首先我们给出大小端的定义: 小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址. 大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址. 将0x12345678写入到以1000h开始的内存中,这里0x12346578中0x12~0x78的地址是从高到低 如果,我们的机器是小端存储的话,结果为: 数据      地址0x78        1000H0x56        1001H0x34        1002H0x12      

大小端序转换

在嵌入式开发中,经常碰到因端序使用不当导致的错误,故决定决定将工作中常见的转序函数进行梳理,一是为了避免犯同样的错误,二是为了以后方便查询.本文分为四个部分:1.什么是大小端序:2.大小端序数据相互转换函数:3.应用场景:4.使用总结. 1.什么是大小端序 大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中. 小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中. 现在,以一个unsigned int整型数据0x12345678为例,

Linux中判断大小端的一种方法

大小端的定义无需赘言,常用的方法有使用联合体和指针法,如: int checkCPU() { union w { int a; char b; }c; c.a = 1; return (c.b == 1); // 小端返回TRUE,大端返回FALSE } 实际上Linux操作系统的源码中,其判断更为简洁: static union { char c[4]; unsigned long mylong; } endian_test = {{ 'l', '?', '?', 'b' } }; #defi

[Java]_[初级]_[utf8编码的byte[]数组转换为String时要注意的问题]

场景: 1. 通过socket给Java传递byte[]数组时,utf-8的字节数组在转换为String, Java并不会遇到0就停止结束,而是一直使用完byte[]的容量, 所以在转换为Java的String需要自己判断字节值是0的位置,再截取数组长度. public static int searchByte(byte[] data, byte value) { int size = data.length; for (int i = 0; i < size; ++i) { if (data

[Cocoa]_[初级]_[NSTableView--数据操作和表格操作要注意的问题]

1.首先在MainMenu.lib文件里面创建一个NSTableView,在界面上显示一个表格出来,并对表格进行设置. 2.创建文件TableViewDelegate.h和TableViewDelegate.m(文件内容如下文件所示).并在MainMenu.lib文件中创建一个Object(从窗口右边选中Object,拉到在Window中的对话框中),命名:TableViewDelegate. 3.设置代理:tableView 进行设置,和图片中的Table View进行连接. staticFi

[C/C++]_[初级]_[编程容易犯错的地方]

场景: 1. 这里总结一些日常的容易犯错的细节. 问题1:一个类A有成员变量int deleted,给定一个A的对象指针 *a, 判断deleted为真的时候输出一个语句. 一般情况下新手会这样写: if(a) { if(a->deleted) { cout << "deleted" << endl; } } 但这样其实不够精简和浪费行数, 应该这样. if(a && a->deleted) { cout << "

[libcurl]_[初级]_[使用libcurl下载大文件]

场景: 1. 在Windows编程时, 下载http页面(html,xml)可以使用winhttp库,但是并不是很下载文件,因为会失败. 由此引出了WinINet库,无奈这个库的稳定性比较低,使用例子又少, 下载大文件时经常是不完整,可查找的资料很少或者是没有特殊情况的解决办法. 2. 我的原则是如果系统有自带的就用系统的,但是 WinINet 要掌握需要花不少时间. 时间因素考虑到了libcurl. 3. libcurl支持ftp,http等协议的文件读取,还能自动获取文件大小, 最重要的是不