//當然可以:我分兩步講解,兩種方法,一個比較簡單,利用系統(tǒng)API,一個講原理稍微復雜一點!
湖州網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、自適應網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)公司。
import?java.util.Scanner;
public?class?Tohex?
{
//錄入數(shù)字用!
private?static?Scanner?sc=new?Scanner(System.in);
//容器,存放轉好的數(shù)字,也可以不用,也可以用數(shù)組!
private?static?StringBuffer?sb;
public?static?void?main(String[]?args)?
{
/*
?Integer,這個類功能很強大,是Java提供的,想用可以查詢一下;
?特點就是簡單拿來就用,新手不建議使用,搞懂進制轉換原理以后在去使用API事半功倍!
*/
System.out.println("\n\t\t==========裝16進制!==========\n\n系統(tǒng)API(Integer)演示:\n");
init();
}
//方法1,用系統(tǒng)API
private?static?void?init()
{
//十進制!
int?a=125454;
//轉換過程16進制!
String?hex=Integer.toHexString(a);
System.out.println(a+"?十六進制=?"+hex+"\n------------------------------------\n\t\t自定義測試:\n");
input();
}
//方法2:自己動手轉換,了解轉換原理!
private?static?void?input()
{
while(true)
{
System.out.println("輸入被轉數(shù)字:\n");
int?a=sc.nextInt();
System.out.println("輸入想轉的進制:暫時支持2,8,16進制");
int?b=sc.nextInt();
ToHex(a,b);
}
}
//轉換過程!
private?static?void?ToHex(int?x,int?y)//a是要轉數(shù)字,b是進制!
{
sb=new?StringBuffer();
int?a=x,b=0,c=0;
switch(y)
{
case?2:b=1;c=1;
break;
case?8:b=7;c=3;
break;
case?16:b=15;c=4;
break;
default?:break;
}
while(a0)
{
int?tem=ab;
String?s=?tem9?((char)(tem-10+'A'))+"":tem+"";
sb.append(s);
a=ac;
}
print(sb);//傳遞打印!
}
//打印!
private?static?void?print(StringBuffer?sb)
{
System.out.println("\n結果演示:"+sb.reverse()+"\n請繼續(xù)輸入測試---\n");
sb=null;
}
}
算法比較復雜,建議直接使用系統(tǒng)內(nèi)置的方法
int?num?=?1000;
String?hexStr?=?Integer.toHexString(num);
直接看源碼,可能你需要的只是簡單的,需要的話我可以給你寫個簡單的算法,只支持正數(shù),應該還不能太大的
public?static?void?main(String[]?args)?{
int?num?=?5000;
String?hexStr?=?Integer.toHexString(num);
System.out.println(hexStr);
StringBuilder?builder?=?new?StringBuilder();
int2Hex(num,?builder);
System.out.println(builder.reverse());
}
static?char[]?hexChar?=?{?'0',?'1',?'2',?'3',?'4',?'5',?'6',?'7',?'8',?'9',?'a',?'b',?'c',?'d',?'e',?'f'?};
public?static?void?int2Hex(int?num,?StringBuilder?builder)?{
if?(num??0)?{
return;
}
if?(num??16)?{
builder.append(hexChar[num]);
return;
}
int?temp?=?num?%?16;
int?index?=?num?/?16;
builder.append(hexChar[temp]);
int2Hex(index,?builder);
}
public?class?test?{
public?static?void?main(String[]?args)?{
long?f?=?Integer.parseInt("8FFFFFF",?16);//把16進制轉化成10進制
long?t?=?1024*1024;
double?m?=?f/(double)t;
System.out.println(m);
}
}
我計算的結果是:143.99999904632568
我大體估算了下也是
8FFFFFF=8*16^6+15*(16^5+16^4+16^3+16^2+16+1)
=2^27+15*(2^20+2^16+2^12+2^4+1)
=2^27+(2^4-1)*(2^20+2^16+2^12+2^4+1)
=2^27+2^24+2^20+2^16+2^8+2^4-(2^20+2^16+2^12+2^4+1)
=2^27+2^24+2^19+2^15-2^12+2^8-1
=2^27+2^24+2^19+2^12*(2^3-1)+2^8-1
=2^27+2^24+2^19+2^12*7+2^8-1
t=2^27+2^24+2^19+2^12*7+2^8-1
1MB=2^10KB=2^20b
m=t/2^20=2^7+2^4+2^(-1)+2^(-5)=16*9+0.5=144.5
想不到你是一個java高手,你寫的程序我沒 有遇見過,是文件的讀寫吧?
1、寫轉換函數(shù)是必須的,目前Jdk中無現(xiàn)有類。
2、在不同的字符編碼當中,漢字的對應的數(shù)值或者說編碼值不一樣,像GBK、Unicode肯定是不一樣的。以Java默認的Unicode為例說明問題。
3、 一,得到字符串,
二,遍歷每個字符,用char來接收,實為int值,或直接用int也可以。
三,Integer.toHexString(每個字符對應的int值);
四,前綴加個“0x”就可以了。
4、如果是其它類型的話,找到對應的字符和數(shù)值對應表就可以了。
不知可否解決問題了。
這個問題其實很簡單。你只要把string作為16進制轉成int,運算,得到結果轉成16進制顯示就可以了。提供你這樣一個思路。
過程如下
String
str1
=
"FF98";//取值
textFiled1.getText();
String
str2
=
"EFA7";//取值
textFiled1.getText();
//轉化
int
a
=
convertToInt(str1);
int
b
=
convertToInt(str2);
//運算(例如加法)
int
c
=
a+b;
String
result
=
convertToHex(c);
//顯示
textField1.setText(result);
其中
int
convertToInt(String
s){
return
Integer.parseInt(s,16);
}
String
convertToHex(int
i){
return
Integer.toHexString(i);
}
給分吧。
在main方法中直接調(diào)用即可,代碼如下:
public static void main(String[] args) {
HexToDec("1e6f");
}
/**
* 將十六進制的字符串轉化為十進制的數(shù)值
*/
public static long HexToDec(String hexStr) {
MapString, Integer hexMap = prepareDate(); // 先準備對應關系數(shù)據(jù)
int length = hexStr.length();
long result = 0L; // 保存最終的結果
for (int i = 0; i length; i++) {
result += hexMap.get(hexStr.subSequence(i, i + 1)) * Math.pow(16, length - 1 - i);
}
System.out.println("hexStr=" + hexStr + ",result=" + result);
return result;
}
/**
* 準備十六進制字符對應關系。如("1",1)...("A",10),("B",11)
*/
private static HashMapString, Integer prepareDate() {
HashMapString, Integer hashMap = new HashMapString, Integer();
for (int i = 1; i = 9; i++) {
hashMap.put(i + "", i);
}
hashMap.put("a", 10);
hashMap.put("b", 11);
hashMap.put("c", 12);
hashMap.put("d", 13);
hashMap.put("e", 14);
hashMap.put("f", 15);
return hashMap;
}