【发布时间】:2012-01-12 21:16:02
【问题描述】:
我正在处理一个 C++ 项目,该项目要求我知道系统是大端还是小端。
我想出了一些我认为可以成功检测到这一点的代码!不过,这是我第一次真正这样编程,我想知道这是否真的有效:
int fourbytesint = 0;//Initialize four bytes
((char*)&fourbytesint)[0] = 1;//Get the first byte of our four bytes
//(Pretend the int is an array of 4 bytes, get the first byte)
//Depending upon the endian, this will be a reasonably small number, or an unreasonably large number
if (fourbytesint > 1000)
{
cout << "Big endian!" << endl;
}
else
{
cout << "Little Endian!" << endl;
}
另外,我的导师告诉我,C++ 中的 char 可以用来存储字节。我对此有点警惕,正如我在 Java 等语言中所知道的那样,char 通常存储两个字节的 Unicode 字符。
我在上面的例子中使用 char 作为字节是否正确?
【问题讨论】:
-
您确定需要知道您的字节顺序吗?干什么用的?
-
这已经被问过很多次了。 stackoverflow.com/q/1001307/1078151
-
我正在为学校做作业,我的老师让我写一些与他的数据结构交互的东西。他的数据结构是原始字节数据块的形式,并且由于其性质,依赖于大端/小端。他提供了该数据的两份副本,一份用于大端系统,一份用于小端系统。我在 mac OSX 上运行,因此很难判断使用哪一个。我只是想让我的代码为我选择。
-
@ThatChuckGuy 我或多或少地在问我的代码是否能工作
-
@GeorgesOatesLarsen,如果您使用的是 intel mac(即过去几年出售的任何 mac),请使用 little endian