本发明涉及计算机领域,更具体地,涉及一种数值的数据类型转换的方法及装置。
背景技术:
目前,移动终端的业务开发主要是采用JAVA语言,而服务器端则大多采用C++语言进行业务服务,考虑到JAVA语言的内置数据类型为有符号类型,而C++语言不仅包括有符号类型,还包括无符号类型,例如,JAVA语言中的int类型为32位有符号类型,其数值范围是“-2147483648”到“2147483647”,而C++语言里的uint32类型是32位无符号整型,其数值范围是“0-4294967296”,由于两者的数值范围不匹配,这样JAVA中的数据在和C++服务端进行数据传输交换时候会遇到数据类型无法匹配的情况,进而影响整个业务系统的正常运行。
技术实现要素:
鉴于上述问题,本发明提出了一种数值的数据类型转换的方法及装置实现JAVA中的数据在和C++服务端进行数据传输交换时候数据匹配的目的,本发明采用如下技术方案:
方案一:
提供一种数值的数据类型转换的方法,包括以下步骤:
从第一数据类型的存储空间中获取第一数值,所述第一数据类型为有符号数据类型;
转换所述第一数值为二进制字符串,根据所述二进制字符串生成第二数值;
存储所述第二数值至第二数据类型存储空间,所述第二数据类型存储空间大于所述第一数据类型的存储空间。
优选地,所述转换所述第一数值为二进制字符串之前包括:
判断所述第一数值是否不小于零;
若是,则存储所述第一数值至第二数据类型的存储空间。
若否,则继续执行转换所述第一数值为二进制字符串的步骤。
优选地,所述第一数据类型为INT类型,所述第二数据类型为LONG类型。
优选地,所述第一数据类型为INT类型,所述第二数据类型为BIGINTEGER类型。
优选地,所述数值的数据类型转换的方法适于以JAVA语言实现,所述存储了第二数值的变量的数据类型与C++语言的无符号类型的定义相兼容。
方案二:
提供一种数值的数据类型转换的方法,包括如下步骤:
具体化用于转换数据类型的类的实例,向该实例传递第一数值,在该实例将所述第一数值转换为无符号类型的第二数值并返回后,存储所返回的所述第二数值到相应变量,以完成对所述第一数值的数据类型转换;
引用或输出所述存储了所述第二数值的变量。
优选地,所述用于转换数据类型的类依据方案一任意一项的数值的数据类型转换的方法实现。
方案三:
提供一种数值的数据类型转换的装置,包括:
获取模块,用于从第一数据类型的存储空间中获取第一数值,所述第一数据类型为有符号数据类型;
转换生成模块,用于转换所述第一数值为二进制字符串,根据所述二进制字符串生成第二数值;
存储模块,用于存储所述第二数值至第二数据类型存储空间,所述第二数据类型存储空间大于所述第一数据类型的存储空间。
优选地,所述数值的数据类型装置还包括:
判断模块,用于在转换所述第一数值为二进制字符串之前判断所述第一数值是否不小于零;
第一执行模块,用于在所述第一数值不小于零时,存储所述第一数值至第二数据类型的存储空间。
第二执行模块,用于在所述第一数值小于零时,继续执行转换所述第一数值为二进制字符串的步骤。
方案四:
提供一种数值的数据类型转换的装置,包括:
转换模块,用于具体化用于转换数据类型的类的实例,向该实例传递第一数值,在该实例将所述第一数值转换为无符号类型的第二数值并返回后,存储所返回的所述第二数值到相应变量,以完成对所述第一数值的数据类型转换;
应用模块,用于引用或输出所述存储了所述第二数值的变量。
与现有技术相比,该发明一种数值的数据类型转换的方法及装置具有如下有益效果:
本发明一种数值的数据类型转换的方法及装置根据第一数据类型中的第一数值生成第二数值上,再将其存储到存储空间较大的第二数据类型中的方式,实现了有符号数据类型到无符号数据类型的转变,解决了JAVA中的数据在和C++服务端进行数据传输交换时有符号数与无符号数不匹配的问题,在一定程度上保障了整个系统的正常运行。
本发明一种数值的数据类型转换的方法通过转换数据类型的类的设计,方便了开发人员的调用,缩短了开发时间,提高了生产效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本发明实施例一种数值的数据类型转换的方法流程图;
图2示出了本发明实施例一种数值的数据类型转换的装置模块结构示意图;
图3示出了本发明又一实施例一种数值的数据类型转换的装置模块结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,本发明实施例提供一种数值的数据类型转换的方法,该数值的数据类型转换的方法适于以JAVA语言实现,如图1所示,该数值的数据类型转换的方法包括如下步骤:
步骤101:从第一数据类型的存储空间中获取第一数值,所述第一数据类型为有符号数据类型;其中,第一数据类型为JAVA基本数据类型;第一数值为所述第一数据类型对应的取值范围中的数值,考虑到JAVA内置的数据类型均为有符号数据类型,因此,所述第一数据类型也为有符号数据类型。
JAVA数据类型包括基本数据类型和引用数据类型,其中,基本数据类型是指直接包含值的类型,JAVA为基本数据类型提供语言级别的支持,即已经在JAVA中预定义,用相应的保留关键字表示,基本数据类型包括逻辑型、文本型、数值型,其中,
逻辑型,对应的英文是BOOLEAN,BOOLEAN数据类型只允许取值TRUE或者FALSE,值得一提的是,与C语言不同,在JAVA中不允许用0或者非0替代TRUE或者FALSE;
文本型,对应的英文是CHAR,CHAR数据类型为单引号括起来的字符,例如“‘a’”;在JAVA中,字符采用全球语言统一编码Unicode;
数值型包括整数型以及浮点型。整数型根据字数范围以及字段长度又分为BYTE、SHORT、INT、LONG,其中,BYTE占用的存储空间是一个字节,表数范围是-128—127;SHORT占用的存储空间是两个字节,表数范围是-32768—32767;INT占用的存储空间是四个字节,表数范围是-2147483648—2147483647;LONG占用的存储空间是八个字节,表数范围是-9223372036854775808—9223372036854775807。浮点型在数学中0到1有无数个浮点数;而计算机是离散的,所以表示的时候有误差,计算机用精度(也及小数点后几位来表示正确),在JAVA中浮点型包括FLOAT、DOUBLE,其中,FLOAT占用的存储空间是四个字节,表数范围是-3.403E38—-3.403E38;DOUBLE占用的存储空间是八个字节,表数范围是-1.798E308—-1.798E308。
与基本数据类型不同,引用数据类型类似于C/C++中的指针,其指向一个对象,不是原始值,指向对象的变量是引用变量。在JAVA里面除去基本数据类型的其它类型都是引用数据类型,自己定义的类,譬如STRING,都是引用类型,其包括类、数组、枚举、接口、注解。
示例地,在一些实施方式中,第一数据类型为整数型,譬如INT,第一数值为INT数值对应的值,如-2,当然,-2也可以为其他的整数型,譬如BYTE、SHORT、LONG,此处仅仅是示例而已。
步骤103:转换所述第一数值为二进制字符串,根据所述二进制字符串生成第二数值。
具体地,转换第一数值为二进制字符串优选通过引用数据类型STRING类型。STRING类型是FINAL类,也即意味着STRING类型不能被继承,并且它的成员方法都默认为FINAL方法。在JAVA中,FINAL也是一个JAVA的关键字意思是“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。值得一提的是,FINAL类不能被继承,没有子类,FINAL类中方法默认是FINAL的。因此,这也是STRING类型不能被继承,并且它的成员方法都默认为FINAL方法的原因。
在实际实施过程中,使用STRING类型转换第一数值为二进制字符串有三种方式,具体参见如下,现在仍旧假设“-2”为第一数值:
第一种是,String.valueOf(int-2);
第二种是,Integer.toString(int-2);
第三种是,-2+"";
其中,第一种可以应用到任何数据类型,且不会有异常报出;第二种则是先将“-2”转换成INTEGER型,然后再将INTEGER转换成STRING型。在执行效率上第二种最快,第三种最慢。
示例地,将“-2”转为二进制字符串是:
“11111111111111111111111111111110”。
在一些实施方中,第二数值为将二进制字符串第一位看做数值位的值,对应的,如上述的“11111111111111111111111111111110”对应的第一数值为“-2”,则对应的第二数值为“4294967294”。
步骤105:存储所述第二数值至第二数据类型存储空间,所述第二数据类型存储空间大于所述第一数据类型的存储空间。其中,存储了第二数值的第二数据类型存储空间与C++语言的无符号类型的定义相兼容;存储空间为数据类型在内存中被分配的空间,结合上述整数型的介绍可知,存储空间越大对应的表数范围也就越大,两者是相对应的,因此,第二数据类型存储空间大于第一数据类型的存储空间也即是第二数据类型表数范围大于第一数据类型的表数范围。
示例地,当第一数据类型为INT类型,则第二数据类型可以为LONG类型,因为INT占用的存储空间是四个字节,表数范围是-2147483648—2147483647,而LONG占用的存储空间是八个字节,表数范围是-9223372036854775808—9223372036854775807。
当然,考虑到整数型中的LONG本身的表数范围就比较大,其对应第二数据类型不能为基本数据类型,这时候可以调用JAVA中的BIGINTEGER类型,其中,BIGINTEGER类型是任意精度的整数运算。对应地,当第一数据类型为INT类型,则第二数据类型可以为BIGINTEGER类型。
在一些实施方式中,考虑到第一数值可能为正值或者0,由于正值或者0本身的第一位也是0,这样在转换前后,第一数值与第二数值相同,譬如“2”对应的二进制字符串是“00000000000000000000000000000010”而该“00000000000000000000000000000010”对应的第二数值也是“2”,因此,可以直接将第一数值存储至第二数据类型的存储空间,这样就可以节省内存占有,提高系统的整体运行效率,对应地步骤就是,在转换第一数值为二进制字符串之前包括:
判断第一数值是否不小于零;
若是,则存储第一数值至第二数据类型的存储空间;
若否,则继续执行转换第一数值为二进制字符串的步骤。
基于同一数值的数据类型转换的方法相同的发明构思,本发明实施例还提供一种数值的数据类型转换的方法,包括如下步骤:
具体化用于转换数据类型的类的实例,向该实例传递第一数值,在该实例将第一数值转换为无符号类型的第二数值并返回后,存储所返回的第二数值到相应变量,以完成对第一数值的数据类型转换;
引用或输出存储了第二数值的变量。
其中,转换数据类型的类依据上述同一数值的数据类型转换的方法实现。
示例地,在开发过程中,该转换数据类型的类的名称可以为“Signswitch”,这样经过“Signswitch”就可以直接实现第一数值的数据类型转换,极大的方便了开发人员的开发,同时在一定程度上缩短了开发时间,提高了生产效率。
值得一提的是,该转换数据类型的类还可以作为NUMBER类的子类,这样就可以在该转换数据类型的类中调用NUMBER类成员的方法,在一定程度上丰富了该转换数据类型的类的应用场景,其中,NUMBER类成员的方法包括但不限于如下:
compareTo():将number对象与参数比较;
equals():判断number对象是否与参数相等;
min():返回两个参数中的最小值;
max():返回两个参数中的最大值。
与现有技术相比,本发明一种数值的数据类型转换的方法具有如下有益效果:
本发明一种数值的数据类型转换的方法根据第一数据类型中的第一数值生成第二数值上,再将其存储到存储空间较大的第二数据类型中的方式,实现了有符号数据类型到无符号数据类型的转变,解决了JAVA中的数据在和C++服务端进行数据传输交换时有符号数与无符号数不匹配的问题,在一定程度上保障了整个系统的正常运行。
本发明一种数值的数据类型转换的方法通过转换数据类型的类的设计,方便了开发人员的调用,缩短了开发时间,提高了生产效率。
请参阅图2,基于同数值的数据类型转换的方法相同的发明构思,本发明实施例还提供一种数值的数据类型转换的装置,其包括获取模块2002、转换生成模块2004以及存储模块2006,其中,
获取模块2002,用于从第一数据类型的存储空间中获取第一数值,第一数据类型为有符号数据类型;
转换生成模块2004,用于转换第一数值为二进制字符串,根据二进制字符串生成第二数值;
存储模块2006,用于存储第二数值至第二数据类型存储空间,第二数据类型存储空间大于第一数据类型的存储空间。
在一些实施方式中,该数值的数据类型装置包括:
判断模块,用于在转换第一数值为二进制字符串之前判断第一数值是否不小于零;
第一执行模块,用于在第一数值不小于零时,存储第一数值至第二数据类型的存储空间。
第二执行模块,用于在第一数值小于零时,继续执行转换第一数值为二进制字符串的步骤。
可选地,第一数据类型为INT类型,第二数据类型为LONG类型。
可选地,第一数据类型为INT类型,第二数据类型为BIGINTEGER类型。
在一实施方式中,该数值的数据类型装置还包括:
打包模块,用于在存储第二数值至第二数据类型存储空间之后将存储在第二数据类型的第二数值打包为类;
定义模块,用于定义打包的类为无符号类,无符号类的父类为NUMBER类。
与现有技术相比,本发明一种数值的数据类型转换的装置通过获取模块2002、转换生成模块2004以及存储模块2006的设置,实现了有符号数据类型到无符号数据类型的转变,解决了JAVA中的数据在和C++服务端进行数据传输交换时有符号数与无符号数不匹配的问题,在一定程度上保障了整个系统的正常运行。
请参阅图3,适应地,本发明实施例还提供一种数值的数据类型转换的装置,包括:
转换模块3001,用于具体化用于转换数据类型的类的实例,向该实例传递第一数值,在该实例将第一数值转换为无符号类型的第二数值并返回后,存储所返回的第二数值到相应变量,以完成对第一数值的数据类型转换;
应用模块3003,用于引用或输出存储了第二数值的变量。
与现有技术相比,本发明一种数值的数据类型转换的装置通过转换模块3001、应用模块3003的设置,实现了有符号数据类型到无符号数据类型的转变,解决了JAVA中的数据在和C++服务端进行数据传输交换时有符号数与无符号数不匹配的问题,在一定程度上保障了整个系统的正常运行。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上对本发明所提供的一种数值的数据类型转换的方法及装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。