android开发:c++代码翻译成java的基本类型转换,一张表就搞定
user:Linvest
一、常规转换,一表即可(紫色字体自行评估是否需要更高精度的单位,正常情况下适用):
C++类型 | 存储大小(32位机) | 值范围 | 楚 汉
河 界 | java类型 | 存储大小 | 值范围 | |
void | 0 | 无值域 | byte | 1 | -128到127 | ||
bool | 1 | true和false | short | 2 | -32768到32767 | ||
char | 1 | -128到127 | int | 4 | ’-2147483648到2147483647 | ||
unsigned char | 1 | 0到255 | long | 8 | -9223372036854775808到9223372036854775807 | ||
signed char | 1 | -128到127 | float | 4 | -3.4E38到3.4E38 | ||
short | 2 | -32768到32767 | double | 8 | -1.7e308到1.7e308 | ||
unsigned short | 2 | 0到65535 | char | 2 | 0到65535 | ||
wchar_t(unsigned short) | 2 | 0到65535 | boolean | 1 | true和false | ||
int | 4 | -214783648到2147483647 | |||||
unsigned int | 4 | 0到4294967295 | |||||
long | 4 | -214783648到2147483647 | |||||
unsigned long | 4 | 0到4294967295 | |||||
long long | 8 | 0-18446744073709552000 | |||||
float | 4 | -3.4E-38到3.4E+38 | |||||
double | 8 | -1.7E-308到1.7E+308 | |||||
long double | 16 | -3.4E-4932到1.1E+4932 | |||||
C++类型用合适的java代替(用于C++代码翻译成java) | |||||||
C++类型 | 存储大小(32位机) | 值范围 | java类型 | 存储大小 | 值范围 | ||
void | 0 | 无值域 | void | 0 | 无值域 | 作为参数删除,作为返回值保留,作为指针用object | |
bool | 1 | true和false | boolean | 1 | true和false | ||
char | 1 | -128到127 | int | 4 | -2147483648到2147483647 | 不用byte的原因:容易记,且如果用byte,那unsigned char会显得很奇怪 | |
unsigned char | 1 | 0到255 | int | 4 | -2147483648到2147483647 | ||
signed char | 1 | -128到127 | int | 4 | -2147483648到2147483647 | ||
short | 2 | -32768到32767 | int | 4 | -2147483648到2147483648 | 不用short的原因:容易记,且如果用short,那unsigned short会显得很奇怪 | |
unsigned short | 2 | 0到65535 | int | 4 | -2147483648到2147483649 | ||
wchar_t(unsigned short) | 2 | 0到65535 | int | 4 | -2147483648到2147483650 | ||
int | 4 | -214783648到2147483647 | int | 4 | -2147483648到2147483648 | ||
unsigned int | 4 | 0到4294967295 | int | 4 | -2147483648到2147483648 | 基于C+=代码太多是uint32_t了,用int不会超的(算法除外) | |
long | 4 | -214783648到2147483647 | long | 8 | -9223372036854775808到9223372036854775807 | ||
unsigned long | 4 | 0到4294967295 | long | 8 | -9223372036854775808到9223372036854775807 | ||
long long | 8 | 0-18446744073709552000 | long | 8 | -9223372036854775808到9223372036854775807 | 用得不多,实在不行换成损精度的float(算法除外) | |
float | 4 | -3.4E-38到3.4E+38 | float | 4 | -3.4E38到3.4E38 | ||
double | 8 | -1.7E-308到1.7E+308 | double | 8 | -1.7e308到1.7e308 | ||
long double | 16 | -3.4E-4932到1.1E+4932 | xxx | xxx | xxx | java觉得心好累 |
问:unsigned int为何转成int,范围大变小损精度啊?
解:大部分情况适用,C++程序员都很喜欢用无符号类型的,实际上也不会用到很大的值,
实在是需要大数,就用float或double吧;
问:long long类型为何转成long,而不转换float?
解:同上,没用过,可能算法上会用到吧,以前的算法工程师同事也没见他用过那么大的数
问:long double不能转了
解:C++事真多,java没办法了,还是用jni吧;(本人也是C++开发人员-_-)