c – big endian和little endian值是否可移植?
你好,我有一个小端dout和大端的小dout我知道这个问题已经问过n次但我无法弄清楚以下几点
让我们把int i = 10它以二进制形式存储为00000000 00000000 00000000 00001010在堆栈部分如下: – 00000000 |00000000 |00000000 |00001010 // In case of little endian MSB-------------------------------------------LSB 大端 00001010 |00000000 |00000000 |00000000 // In case of in big endian MSB-------------------------------------------LSB 在这个小端和大端都将给出相同的输出10? 那么这些小端和大端的用途是什么? 我被要求实现代码,这些代码可以在我的访谈中对所有大小系统都是可移植的.我回答说:
这个答案是否正确? 解决方法00000000 | 00000000 | 00000000 | 00001010 // big endian 00001010 | 00000000 | 00000000 | 00000000 // little endian 无论数据是以big endian还是little endian模式存储,大多数情况下,只有当你试图通过指针访问内存中较小部分的变量时才会很重要,就像试图通过a访问32位整数的最低有效字符一样指向字符的指针或带有字符数组的联合.另一个问题的例子是,如果您将文件中的数据直接读取到32位整数数组中,或者从32位整数数组中读取数据.文件中的数据通常也以小端或大端模式存储. 据我所知,没有通用的编译时方法来确定cpu是以big endian模式还是little endian模式运行(特定的编译器可能已为此定义).您可以使用32位整数和大小为4的字符数组的并集编写测试代码.然后将union中的整数设置为10,并检查union字符数组[0]是否包含10表示小端模式,或者如果联合字符数组[3]包含10,这意味着大端模式.可以使用其他方法来确定CPU是处于小端还是大端模式. 一旦确定cpu是处于小端还是大端模式,就可以包含条件代码来处理这两种情况,例如来自/来自32位整数数组的文件I / O.如果您希望文件数据处于大端模式,但您的cpu处于小端模式,则必须在写入之前或从文件读取之后反转每个整数的字节. 无论cpu模式如何,您还可以编写代码序列以大端模式存储数据.如果已经处于大端模式,它将浪费时间,但它适用于大端和小端模式: char buffer[256]; char * ptr2char; uint32_t uint32bit; /* ... */ ptr2char = buffer; /* store uint32bit in big endian mode */ *ptr2char++ = (uint32bit >> 24)&0xff; *ptr2char++ = (uint32bit >> 16)&0xff; *ptr2char++ = (uint32bit >> 8)&0xff; *ptr2char++ = (uint32bit )&0xff; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- /usr/bin/ld找不到-lbsd
- MmMapIoSpace和MmUnMapIoSpace
- xml-parsing – 从Wikipedia XML转储中获取静态HTML文件
- ajax, javascript的基本学习
- 在Xcode中调试时,如何显示程序的所有线程
- PostgreSQL 常用数据类型
- 窥探 Swift 之别具一格的 Struct 和 Class
- WPF整理-为User Control添加依赖属性
- ruby-on-rails – NoMethodError:未定义的方法`deliver_no
- 作业五之AsyncTask,SQLite,Contacts,AutoCompleteTextView(