Android 如何判斷CPU是32位還是64位

2021-07-09 14:39:58 字數 2539 閱讀 6821

**: 

可以利用三種方式來判斷cpu是32位還是64位:

1. 讀取android 的system property ("ro.product.cpu.abilist64")來判斷

2. 讀取"/proc/cpuinfo"檔案的第一行來判斷

3. 讀取libc.so檔案的elf頭部e_indent陣列,根據陣列第e_indent[4]的取值來判斷

public static final string cpu_architecture_type_32 = "32";

public static final string cpu_architecture_type_64 = "64";

/** elf檔案頭 e_indent陣列檔案類標識索引 */

private static final int ei_class = 4;

/** elf檔案頭 e_indent[ei_class]的取值:elfclass32表示32位目標 */

private static final int elfclass32 = 1;

/** elf檔案頭 e_indent[ei_class]的取值:elfclass64表示64位目標 */

private static final int elfclass64 = 2;

/** the system property key of cpu arch type */

private static final string cpu_architecture_key_64 = "ro.product.cpu.abilist64";

/** the system libc.so file path */

private static final string system_lib_c_path = "/system/lib/libc.so";

private static final string system_lib_c_path_64 = "/system/lib64/libc.so";

private static final string proc_cpu_info_path = "/proc/cpuinfo";

private static boolean logenable = false;

/*** check if the cpu architecture is x86

*/public static boolean checkifcpux86() else

}/**

* get the cpu arch type: x32 or x64

*/public static string getarchtype(context context)

return cpu_architecture_type_64;

} else if (iscpuinfo64()) else if (islibc64()) else

return cpu_architecture_type_32;}}

private static string getsystemproperty(string key, string defaultvalue) catch (exception e)

}if (logenable)

return value;

}/**

* read the first line of "/proc/cpuinfo" file, and check if it is 64 bit.

*/private static boolean iscpuinfo64()

return true;

} else

}} catch (throwable t)

} finally

} catch (exception e)

try

} catch (exception e) }}

return false;

}/**

* check if system libc.so is 32 bit or 64 bit

*/private static boolean islibc64()

return true;}}

file libcfile64 = new file(system_lib_c_path_64);

if (libcfile64 != null && libcfile64.exists())

return true;}}

return false;

}/**

* elf檔案頭格式是固定的:檔案開始是乙個16位元組的byte陣列e_indent[16]

* e_indent[4]的值可以判斷elf是32位還是64位

*/private static byte readelfheadrindentarray(file libfile) else }}

} catch (throwable t)

} finally catch (exception e) }}

}return null;

}

如何判斷CPU是大端還是小端模式

如何判斷cpu是大端還是小端模式 2010 12 03 23 35 25 分類 c c 在arm體系中,每個字單元包含4個位元組單元或者兩個半字單元。在字單元中,4個位元組哪乙個是高位位元組,哪乙個是低位位元組則有兩種不同的格式 big endian和little endian格式。在小端模式中,低...

如何判斷CPU是大端還是小端模式

在arm體系中,每個字單元包含4個位元組單元或者兩個半字單元。在字單元中,4個位元組哪乙個是高位位元組,哪乙個是低位位元組則有兩種不同的格式 big endian和little endian格式。在小端模式中,低位位元組放在低位址,高位位元組放在高位址 在大端模式中,低位位元組放在高位址,高位位元組...

如何判斷CPU是大端還是小端模式

arm體系中,每個字單元包含4個位元組單元或者兩個半字單元。在字單元中,4個位元組哪乙個是高位位元組,哪乙個是低位位元組則有兩種不同的格式 big endian和little endian格式。在小端模式中,低位位元組放在低位址,高位位元組放在高位址 在大端模式中,低位位元組放在高位址,高位位元組放...