web-dev-qa-db-ja.com

Javaの10進数から16進数へのコンバーター

10進数、2進数、16進数の3方向の変換を行う必要がある宿題があります。ヘルプが必要な機能は、10進数を16進数に変換することです。 16進数をほとんど理解していませんが、10進数を16進数に変換する方法はわかりません。 int decを取り込んでString hexを返す関数が必要です。残念ながら、この関数のドラフトはありません。完全に失われました。私が持っているのはこれだけです。

  public static String decToHex(int dec)
  {
    String hex = "";


    return hex;
  }

また、Integer.toHexString()などの事前に作成された関数を使用することはできません。実際にアルゴリズムを作成する必要があるか、何も学習していません。

18
flyingpretzels

1つの可能な解決策:

import Java.lang.StringBuilder;

class Test {
  private static final int sizeOfIntInHalfBytes = 8;
  private static final int numberOfBitsInAHalfByte = 4;
  private static final int halfByte = 0x0F;
  private static final char[] hexDigits = { 
    '0', '1', '2', '3', '4', '5', '6', '7', 
    '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
  };

  public static String decToHex(int dec) {
    StringBuilder hexBuilder = new StringBuilder(sizeOfIntInHalfBytes);
    hexBuilder.setLength(sizeOfIntInHalfBytes);
    for (int i = sizeOfIntInHalfBytes - 1; i >= 0; --i)
    {
      int j = dec & halfByte;
      hexBuilder.setCharAt(i, hexDigits[j]);
      dec >>= numberOfBitsInAHalfByte;
    }
    return hexBuilder.toString(); 
  }

  public static void main(String[] args) {
     int dec = 305445566;
     String hex = decToHex(dec);
     System.out.println(hex);       
  }
}

出力:

1234BABE

とにかく、これにはライブラリメソッドがあります:

String hex = Integer.toHexString(dec);
35
kol

シンプル:

  public static String decToHex(int dec)
  {
        return Integer.toHexString(dec);
  }

ここで述べたように: Java整数から16進整数への変換

22
Andreas L.

Int decを受け取り、文字列の16進数を返す関数が必要です。

http://introcs.cs.princeton.edu/Java/31datatype/Hex2Decimal.Java.html からよりエレガントなソリューションを見つけました。オリジナルから少し変更しました(編集を参照)

_// precondition:  d is a nonnegative integer
public static String decimal2hex(int d) {
    String digits = "0123456789ABCDEF";
    if (d <= 0) return "0";
    int base = 16;   // flexible to change in any base under 16
    String hex = "";
    while (d > 0) {
        int digit = d % base;              // rightmost digit
        hex = digits.charAt(digit) + hex;  // string concatenation
        d = d / base;
    }
    return hex;
}
_

免責事項:私はコーディングインタビューでこのアルゴリズムを使用しています。このソリューションがあまりにも人気が出ないことを願っています:)

2016年6月17日編集base変数を追加して、任意のベース(2進数、8進数、7のベース)に柔軟に変更できるようにしました...
コメントによると、このソリューションは最もエレガントなので、Integer.toHexString()の実装を削除しました。

2015年9月4日編集:よりエレガントなソリューションを見つけました http://introcs.cs.princeton.edu/Java/31datatype/Hex2Decimal .Java.html

12
Raymond Chenon

Decからhex、octまたはbinへの変換については、以下のdec2mメソッドを検討してください。

サンプル出力は

28 dec == 11100 bin 28 dec == 34 oct 28 dec == 1C hex

public class Conversion {
    public static void main(String[] argv) {
        int x = 28;                           // sample number
        if (argv.length > 0)
            x = Integer.parseInt(argv[0]);    // number from command line

        System.out.printf("%d dec == %s bin\n", i, dec2m(x, 2));
        System.out.printf("%d dec == %s oct\n", i, dec2m(x, 8));
        System.out.printf("%d dec == %s hex\n", i, dec2m(x, 16));
    }

    static String dec2m(int N, int m) {
        String s = "";
        for (int n = N; n > 0; n /= m) {
            int r = n % m;
            s = r < 10 ? r + s : (char) ('A' - 10 + r) + s;
        }
        return s;
    }
}
2
Andrej

別の可能な解決策:

public String DecToHex(int dec){
  char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
              'A', 'B', 'C', 'D', 'E', 'F'};
  String hex = "";
  while (dec != 0) {
      int rem = dec % 16;
      hex = hexDigits[rem] + hex;
      dec = dec / 16;
  }
  return hex;
}
1
prometeus10

これを行う最も簡単な方法は次のとおりです。

String hexadecimalString = String.format("%x", integerValue);
0
Skilla

これが私の

public static String dec2Hex(int num)
{
    String hex = "";

    while (num != 0)
    {
        if (num % 16 < 10)
            hex = Integer.toString(num % 16) + hex;
        else
            hex = (char)((num % 16)+55) + hex;
        num = num / 16;
    }

    return hex;
}
0
Idan

DecimalをHexaDecimalに変換するより良いソリューションで、これはそれほど複雑ではありません

import Java.util.Scanner;
public class DecimalToHexa
{
    public static void main(String ar[])
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter a Decimal number: ");
        int n=sc.nextInt();
        if(n<0)
        {
            System.out.println("Enter a positive integer");
            return;
        }
        int i=0,d=0;
        String hx="",h="";
        while(n>0)
        {
            d=n%16;`enter code here`
            n/=16;
            if(d==10)h="A";
            else if(d==11)h="B";
            else if(d==12)h="C";
            else if(d==13)h="D";
            else if(d==14)h="E";
            else if(d==15)h="F";
            else h=""+d;            
            hx=""+h+hx;
        }
        System.out.println("Equivalent HEXA: "+hx);
    }
}        
0
user8720114

任意の番号のコードは次のとおりです。

import Java.math.BigInteger;

public class Testing {

/**
 * @param args
 */
static String arr[] ={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; 
public static void main(String[] args) {
    String value = "214";
    System.out.println(value + " : " + getHex(value));
}


public static String getHex(String value) {
    String output= "";
    try {
        Integer.parseInt(value);
        Integer number = new Integer(value);
        while(number >= 16){
            output = arr[number%16] + output;
            number = number/16;
        }
        output = arr[number]+output;

    } catch (Exception e) {
        BigInteger number = null;
        try{
            number = new BigInteger(value);
        }catch (Exception e1) {
            return "Not a valid numebr";
        }
        BigInteger hex = new BigInteger("16");
        BigInteger[] val = {};

        while(number.compareTo(hex) == 1 || number.compareTo(hex) == 0){
            val = number.divideAndRemainder(hex);
            output = arr[val[1].intValue()] + output;
            number = val[0];
        }
        output = arr[number.intValue()] + output;
    }

    return output;
}

}
0
Ankit Singla

私が使用します

Long a = Long.parseLong(cadenaFinal, 16 );

intengerよりも大きいヘックスがあり、例外をスローするため

0
D4rWiNS

10進数から16進数への変換については、以下のコードをご覧ください。

import Java.util.Scanner;

public class DecimalToHexadecimal
{
   public static void main(String[] args)
   {
      int temp, decimalNumber;
      String hexaDecimal = "";
      char hexa[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

      Scanner sc = new Scanner(System.in);
      System.out.print("Please enter decimal number : ");
      decimalNumber = sc.nextInt();

      while(decimalNumber > 0)
      {
         temp = decimalNumber % 16;
         hexaDecimal = hexa[temp] + hexaDecimal;
         decimalNumber = decimalNumber / 16;
      }

      System.out.print("The hexadecimal value of " + decimalNumber + " is : " + hexaDecimal);      
      sc.close();
   }
}

次のリンク>> Javaが10進数を16進数に変換する で、10進数を16進数に変換するさまざまな方法について詳しく知ることができます。

0
Shiva

次は、10進数を16進数に変換し、時間の複雑さを指定します。O(n) Java inbuilt function

private static String decimalToHexaDecimal(int N) {
    char hexaDecimals[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    StringBuilder builder = new StringBuilder();
    int base= 16;
    while (N != 0) {
        int reminder = N % base;
        builder.append(hexaDecimals[reminder]);
        N = N / base;
    }

    return builder.reverse().toString();
}
0
Sameer Shrestha