首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android NDK的字节顺序

Android NDK的字节顺序
EN

Stack Overflow用户
提问于 2011-06-02 17:54:52
回答 7查看 39.4K关注 0票数 61

我正在使用我的新应用程序,它可以处理手机摄像头拍摄的图像。我的手机是Nexus S,2.3.4。

我用捕获的数据创建了一个ARGB_8888位图。我知道ndk映像库,但它只支持2.2及更高版本。所以我把位图的int[]传给NDK,发现颜色的字节顺序是小端的。

我搜索了维基,发现arm架构是双端的。http://en.wikipedia.org/wiki/Endianness#Bi-endian_hardware

我的问题是,如果arm是双端字节序,如何判断特定设备的字节顺序?我应该在每次访问数据之前测试字节顺序吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-07-14 10:54:47

是的,大多数cpus采用双端字节序,但目前使用的大多数终端用户操作系统都选择使用小端字节序的cpus。沿着这些路线,ARM可以在两者中操作作为一种便利,它在ARM3之后的实际默认值是低字节顺序,这是它启动时的字节顺序模式。我认为人们可以放心地假设所有的Android设备都是低字节顺序的,否则如果不同的android设备是字节顺序的混合,这将是额外的工作。

因为网络字节顺序是大端的,所以将您计划用于数据交换的任何格式转换为网络字节顺序会很有帮助。不过,同样,在英特尔、视窗、iOS和安卓上的Mac是低端的,所以你可能只是用原生的端序来编写结构,并希望你想要将数据移植到的下一个伟大的操作系统不会变得高端序。

票数 40
EN

Stack Overflow用户

发布于 2011-10-29 07:08:46

直接从我的Nexus S:

代码语言:javascript
复制
> import java.nio.*;
> System.out.println(ByteOrder.nativeOrder());
LITTLE_ENDIAN

还应该有一些方法来获得NDK中的排序。

票数 43
EN

Stack Overflow用户

发布于 2012-02-08 16:00:35

ARM处理器(一些安卓系统在其上运行)支持both endian格式。

在NDK-ROOT/platforms/android-x/arch-arm/usr/include/machine/endian.h中,您可以找到:

代码语言:javascript
复制
#ifdef __ARMEB__
#define _BYTE_ORDER _BIG_ENDIAN
#else
#define _BYTE_ORDER _LITTLE_ENDIAN
#endif

使用-mbig-endian ARM option时,__ARMEB__是由gcc编译器定义的。即使大多数Android架构默认使用小字节顺序,您也不应该想当然地认为这是理所当然的,出于可移植性的原因,您的本机代码应该能够处理这两种字节顺序。

要做到这一点,您应该#include <endian.h>并检查BYTE_ORDER以正确地架构您的代码。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6212951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档