**:
可以利用三種方式來判斷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格式。在小端模式中,低位位元組放在低位址,高位位元組放在高位址 在大端模式中,低位位元組放在高位址,高位位元組放...