c的类型转换java类型_C/C++、C#、JAVA(二):基本类型和转换操作

基本类型和转换操作

数据类型

C语言中的基本类型如下。

类型

存储大小

值范围

char

1 字节

-128 到 127 或 0 到 255

unsigned char

1 字节

0 到 255

signed char

1 字节

-128 到 127

int

2 或 4 字节

-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647

unsigned int

2 或 4 字节

0 到 65,535 或 0 到 4,294,967,295

short

2 字节

-32,768 到 32,767

unsigned short

2 字节

0 到 65,535

long

4 字节

-2,147,483,648 到 2,147,483,647

long long long int

8

-9223372036854775808~+9223372036854775807

unsigned long

4 字节

0 到 4,294,967,295

float

4 字节

1.2E-38 到 3.4E+38

double

8 字节

2.3E-308 到 1.7E+308

long double

16 字节

3.4E-4932 到 1.1E+4932

C# 和 java 基本数据类型如下

C#类型

java类型

描述

默认值

bool

boolean

布尔值

False

byte

byte

8 位无符号整数

0

char

char

16 位 Unicode 字符

'\0'

decimal

BigDecimal(非基本)

128 位精确的十进制值,28-29 有效位数

0.0M

double

double

64 位双精度浮点型

0.0D

float

float

32 位单精度浮点型

0.0F

int

int

32 位有符号整数类型

0

long

long

64 位有符号整数类型

0L

sbyte

8 位有符号整数类型

0

short

short

16 位有符号整数类型

0

uint

32 位无符号整数类型

0

ulong

64 位无符号整数类型

0

ushort

16 位无符号整数类型

0

C语言中, char 为 一字节,使用 ASCII 编码,C# 和 Java 中,字符类型(char)都是 2字节,使用 Unicode 编码。

C# 和 Java 中 ,无论是 32 位 机器还是 64 位机器, int 都是 4 字节,long 8字节。

数据类型使用示例

C/C++

c语言的基本类型使用示例如下。

short a = 1;// short int a = 1;

int b = 1;

long c = 1L;// long类型,数字需要带 L

long long d = 1LL;// 两个ll

char e = '1';

float f = 1.0;

double g = 1.0F;// 使用F

C语言 默认整形类型为 int,浮点数类型为 float。

因此赋值常量的时候,如果不是默认的类型,则需要在数值后加上 L 或 F。

short 不需要加;double 加的是 F。

0de0fde0a95e56c0358519310120babb.png

【图片来自:biancheng.net】

C语言中,不同进制的表示方法:

默认为10进制 ,如10 ,20,直接赋值即可。

8进制,开头加上0,如012,013。

二进制,开头加上0b,如0b11。

16进制,开头加上0x,大小写不分,0x21458adf。

注意的是,只有整型才能有这些进制表示法,浮点型不行的。

C#、JAVA

C# 和 JAVA 中使用上面同样示例,如下

short a = 1;

int b = 6_666_666;

long c = 1L; // long类型,数字需要带 L

char e = '1';

float f = 1.0F;

double g = 1.0;

byte h = 1;

C# 和 JAVA 中默认整型是 int,浮点型是 double。

因此 float 要带 F。

C# 和 JAVA 中使用的进制表示法,跟 C 语言一致。

另外,C# 和 JAVA 中,可以使用下划线来分隔数字,提高可读性。例如

int b = 6_666_666;

int b = 0b00000000_00000000_00000000_00000001;

关于布尔型

C 语言中,没有布尔型。

C++ 为 bool,C# 为 bool,java 为 boolean。

C语言中没有 bool 类型,但是很多地方都需要 true 和 flase,怎么解决呢?

C 语言 一般使用 1 和 0 或 非0 和 0 表示 true 和 flase。

对于有些地方,\0 也代表了 false。

例如

int a = 6666;

int b = 161616;

printf("%s",a & b?"true":"flase");

a&b 的结果是一个数字,只要大于 0 或 小于 0 ,即为 true。

而且 C# / Java 中,?: 运算符,左侧条件必须是 bool ,不能为数字。

基本类型的操作

操作方法从哪里来

高级语言提供了大量优秀的库代码,通过调用这些代码,我们可以实现许多骚操作,减少工作量。

首先我们来看一下 C# 和 java 的一部分代码

// C#

int a = new int();

a = 666;

Int32 b = new Int32();

b = new int();

b = 666;

// JAVA

int a = 666;

Integer b = new Integer(666);

在 C# 中,每个预定义类型(基本数据类型)都是系统提供的类型的简写。

例如,关键字int指的是 struct System.Int32。

也就是说, C# 中,int , System.Int32 是等同的。

而在 JAVA 中,int 是基本数据类型,Integer 则是一个包装了 int 的类型,为 int 类型提供了丰富的操作方法。

因此,在 JAVA 中,int a = new int() 的使用是错误的。

C# 中的 int 类型,带有一些方法,但是不多。

JAVA 的 Integer 类提供了一些比较丰富的操作方法。

例如转换字符串为数字,C# 主要靠 Convert 进行转化,JAVA 通过 Integer 就可以操作。

在 C 语言中,基本类型的操作方法,来源于库函数。

字符串转为数值

C

需要注意的是,C语言中没有字符串类型(string)。

C语言中, stdlib.h 头文件定义了几个基本类型以及一些函数。

我们可以将字符串这样转为 int 类型

char a[] = "123";

int b = atoi(a);

从互联网中,我抄录了一些常用的转换函数:

● atof():将字符串转换为双精度浮点型值。

● atoi():将字符串转换为整型值。

● atol():将字符串转换为长整型值。

● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。

● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。

● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。

● itoa():将整型值转换为字符串。

● ltoa():将长整型值转换为字符串。

● ultoa():将无符号长整型值转换为字符串。

● gcvt():将浮点型数转换为字符串,取四舍五入。

● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。

● fcvt():指定位数为转换精度,其余同ecvt()。

C++

C++ 引入 #include 后,就可以直接使用上面 C语言 的函数。

C++可以使用 #include 这个库;C++ 中, string 类型在 string 这个库中定义。

#include 这里,可以更加方便地字符串和数值转换。例如

#include

#include

#include

using namespace std;

int main()

{

//字符转数字

string str1 = "2018219";

string str2 = "2018.219";//浮点数转换后的有效数为6位

int num1 = 0;

double num2 = 0.0;

stringstream s;

//转换为int类型

s << str1;

s >> num1;

//转换为double类型

s.clear();

s << str2;

s >> num2;

cout << num1 << "\n" << num2 << endl;

return 0;

}

// 示例来源 https://www.jianshu.com/p/5c6a6fdb1a41

另外还可以通过 sprintf() 和 sscanf()函数来实现字符串与数值的转换。

C#

C# 转换字符串为数值,非常简单

string a = "123";

int b = int.Parse(a); // int 也包含一些常用方法

int c = Convert.ToInt32(a); // 静态类 Convert 中,还有很多的转换方法和重载方法

Convert 有各种基本类型相互转换的方法。

JAVA

JAVA 中,可以这样转换

String a = "123";

int b = Integer.valueOf(a); // 通过静态方法

Integer c = new Integer(a); // 将 Interger 类转为 int

b = c.intValue();

可以看出,JAVA 中,基本数据类型没啥方法,就是单纯表示数值。

C# 中除了 类型本身带有的方法外,通过 Convert 中丰富的丰富,实现类型转换;

JAVA 中,要使用相应数据类型的对象进行操作,例如 int 是 Integer,double 是 Double。

String a = "123.123";

double b = Double.valueOf(a);

默认值和初始化

C# 和 JAVA

C# 和 JAVA ,任何声明但没有赋值的局部变量,是不能直接使用的。

8597945549437f43a55799dc6072e8a4.png

b0f289014957d990576b8470705ca737.png

在某些情况下,如果没有初始化赋值,系统会自动设置默认值。

例如 C# 和 JAVA 中

static void Main(string[] args)

{

Test(b);

Console.ReadKey();

}

public static int b;

public static void Test(int a)

{

Console.WriteLine(a);

Console.WriteLine(b);

}

public static void main(String[] args) {

Test(b);

}

public static int b;

public static void Test(int a) {

System.out.println(a);

System.out.println(b);

}

输出结果都是 0。

C# 中这些情况下会自动初始化设置默认值

静态变量。

类实例的实例变量。

数组元素。

JAVA 的默认值情况 跟 C# 一样。

另外,C# 有个 default 关键字,可以自动赋予默认值。

int a = default(int);

// 或

int a = default;

在一些暂时不需要赋值或碰到编译器不让通过时,设置常量默认值可能会导致歧义,使用 default 特别方便。

C语言

我们先写个例子来运行一下

#include

int a;

char b[5];

int main()

{

printf("%d",a);

printf("\n\n");

printf("%s",b);

printf("\n\n");

return 0;

}

如无意外,会出现 a 为0,b 为空白。

我们改一下代码,重写运行

#include

int main()

{

int a;

printf("%d", a);

printf("\n\n");

char b[5];

printf("%s", b);

return 0;

}

上面的代码在 c-free 等编译器可以编译通过,在 Vsual Studio 不能(原因是变量a)。

如果强行通过的话,运行后会出现

3567616

亐wP@

修改一下,变成下面的代码,在 Vsual Studio 中运行,会出现 烫烫烫烫烫烫烫烫烫烫烫烫烫烫...

#include

int main(){

char b[5];

printf("%s", b);

return 0;

}

以上示例可以看出,C 语言也是有默认值的,静态变量会出现默认值。

字符数组,声明时,系统会分配内存,并且为每个字节的设置值。

而 char 表示范围最大只有256。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android 平台上,可以通过使用 JNI(Java Native Interface)来调用 C++ 动态链接库(DLL)。JNI 是一个 Java 虚拟机规范,用于实现 Java 代码与本地代码的交互。通过 JNI,可以在 Java 中声明本地方法,并将其实现委托给本地代码,以便在 Java 中调用本地方法。 要在 Android 中调用 C++ DLL,需要先将 DLL 编译为适用于 Android 平台的共享库(.so 文件),然后在 Java 代码中使用 JNI 调用该共享库。具体步骤如下: 1. 在 C++ 中编写动态链接库,并将其编译为适用于 Android 平台的共享库(.so 文件)。 2. 在 Java 中声明 native 方法,以便在 Java 中调用 C++ 方法。例如: ```java public class MyNativeClass { public native int myNativeMethod(int arg); } ``` 3. 在 C++ 中实现该方法,并将其封装为静态库(.a 文件)或共享库(.so 文件)。 4. 将 C++ 库与 Java 代码链接,并打包为 Android 应用程序。 5. 在 Java 代码中,使用 System.loadLibrary() 方法加载 C++ 库,并调用 native 方法。例如: ```java public class MyJavaClass { static { System.loadLibrary("MyNativeLibrary"); } public static void main(String[] args) { MyNativeClass myNativeClass = new MyNativeClass(); int result = myNativeClass.myNativeMethod(42); System.out.println("Result: " + result); } } ``` 需要注意的是,JNI 调用 C++ 方法的过程中,需要进行参数类型转换和内存管理等操作,因此需要谨慎处理。另外,由于 Android 平台涉及多种架构,需要针对不同的架构编译对应的共享库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值