本發明涉及計算機領域,更具體地,涉及一種數值的數據類型轉換的方法及裝置。
背景技術:
目前,移動終端的業務開發主要是采用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++服務端進行數據傳輸交換時有符號數與無符號數不匹配的問題,在一定程度上保障了整個系統的正常運行。
本領域普通技術人員可以理解實現上述實施例方法中的全部或部分步驟是可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。
以上對本發明所提供的一種數值的數據類型轉換的方法及裝置進行了詳細介紹,對于本領域的一般技術人員,依據本發明實施例的思想,在具體實施方式及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發明的限制。