Перевод из десятичной в шестнадцатеричную систему счисления java

Десятичное в шестнадцатеричное преобразование в Java

У меня есть домашнее задание, где мне нужно сделать трехстороннее преобразование между десятичным, двоичным и шестнадцатеричным. Функция, в которой мне нужна помощь, состоит в преобразовании десятичной дроби в шестнадцатеричную. У меня почти нет понимания шестнадцатеричного, тем не менее, как преобразовать десятичный знак в шестнадцатеричный. Мне нужна функция, которая принимает int dec и возвращает String hex . К сожалению, у меня нет никакого проекта этой функции, я полностью потерян. Все, что у меня есть, это.

 public static String decToHex(int dec)

Также я не могу использовать эти готовые функции, такие как Integer.toHexString() или что-то еще, мне нужно сделать алгоритм, иначе я бы ничего не узнал.

«Мне нужно сделать алгоритм, иначе я бы ничего не узнал» — хорошо. Однако я бы сделал еще один шаг вперед и сказал бы, что если вы хотите чему-то научиться, вы должны сами разобраться в алгоритме (вместо того, чтобы кто-то его дал вам). Если вы хотите быть программистом, вы должны быть (или становиться) хорошими в головоломках. Это хорошее упражнение.

Да, я понимаю. Тем не менее, я сижу здесь, почесывая голову, работая над этим. Если бы я не был полностью вне идей и все еще знал, что делать, я бы не пришел сюда в StackOverflow.

Читайте также:  Html span all rows

У вас есть понимание шестнадцатеричного подсчета? Как и двоичный счет, за исключением того, что вместо двух наборов чисел вы используете 16. 0 = 0x0 1 = 0x1 . 9 = 0x9 10 = 0xA 11 = 0xB . 15 = 0XF 16 = 0X11 .

У меня минимальное понимание. Я смотрел некоторые видео-уроки Youtube и разбираюсь в самих основах, например, «А представляет 10» и так далее, пока «F» не станет 16, а затем вы начинаете новый сет. Это 0x0 и 0xA, не знаю. Я просто второкурсник в старшей школе, и мы даже официально не узнали о гексах.

Первый совет: int не является десятичным. Десятичный, как 1253 . int — это числовое значение, которое не имеет встроенного представления, но может быть представлено как base 2 (двоичное число), base 8 (восьмеричное), base 10 (десятичное) или base 16 (шестнадцатеричное) или, если вы действительно хотите, база 27. То, что вы хотите, это процедуры для преобразования каждой базы в / из внутреннего представления int .

Нет ничего особенного в том, что ABCDEF — это 10,11,12,13,14,15 — это просто наиболее очевидное назначение символов для 16-значных базовых символов. Представьте себе, если бы у нас было только 8 пальцев и только цифры 0-7. Тогда мы могли бы представить десятичную дробь с символом A для 8 и B для 9. Или мы могли бы представить шестнадцатеричное с символами !@#$%^ Вместо символов ABCDEF — в выборе нет ничего особенного / священного.

Это базовая проблема конверсии. Возможно, хорошим местом для начала будет таблица ASCII — asciitable.com

Я понимаю, что нет ничего особенного в «ABCDEF». Но насчет того, чтобы int не был десятичным . Я думаю, я понимаю, что это буквально означает, что не все десятичные числа являются целыми числами, и то, что вы поместите в переменную int, может быть представлено в любой базе, но как? Я знаю, что для двоичного кода вы получаете остаток от деления числа, деленного на 2 . Это просто заменить 2 на 16 в шестнадцатеричном?

Учитесь по модулю деления — оператор % . Повторно делите (целое) число на основание N и берите оставшуюся часть (результат % деления) как цифру, уменьшая при этом свое первоначальное значение с помощью / деления. Это даст вам цифры номера в базе N справа налево. Например, 27 десятичное число — это гекс 0x1B. Так что сделайте 27 % 16 и вы получите 11. Делайте 27 / 16 и вы получите 1. Повтор с 1 % 16 дает вам 1, а 1 / 16 дает вам ноль (что означает, что вы сделали). Вы разработали цифры 11 и 1, и 11 — это B в шестнадцатеричном формате, а 1 — это 1. Итак, ваш результат 0x1B.

Обратите внимание, что один метод может преобразовать целое число в любую базу — вы просто вводите N в качестве параметра. Переход к другому был вопросом умножения на N и сложения (после преобразования печатной цифры в ее чисто числовое значение).

Я понял! То, что вы только что сказали, имело смысл для меня конвертировать в любую базу, и я объединил это с массивом возможных цифр, как у kol здесь, и это сработало! И я на самом деле понимаю! Большое спасибо!

13 ответов

Одно из возможных решений:

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); >> 

Во всяком случае, для этого есть библиотечный метод:

String hex = Integer.toHexString(dec); 

@StephenC StephhenC Вы правы, но тогда для чего этот сайт? Помогать людям делать домашнее задание — это плохо, но помогать профессиональным программистам выполнять их настоящую работу — нет? Каждый может найти низкокачественные решения для своих задач программирования. SO делает мир лучше, собирая и выбирая качественные решения. В любом случае, я верю, что ОП мог бы многому научиться из моего решения 🙂

@kol — ни один профессионал никогда не будет игнорировать Integer.toHexString() и реализовывать его самостоятельно. «В любом случае, я верю, что ОП мог бы многому научиться из моего решения» — и я верю, что ОП узнал бы более важные вещи, если бы он не читал его. Суть домашнего задания ОП в том, чтобы научиться программировать. Вы учитесь программировать, написав свои собственные (для начала) уродливые решения, а не читая элегантные решения других людей.

@StephenC «ни один профессионал никогда не проигнорирует Integer.toHexString () и сам его реализует». Это возвращает воспоминания . Несколько лет назад в ходе собеседования мы попросили кандидатов «написать функцию Trim в Delphi, C / C ++ , C # или Java «. Мы хотели проверить, могут ли они написать простой алгоритм. Было шокирующим осознавать, что каждый заявитель (из примерно 25!) Написал функцию, которая просто вызывала встроенную функцию Trim и возвращала ее результат. Даже девушка, которая оказалась лучшей, сделала это. Когда я спросил ее почему, она посмотрела на меня так, будто я идиот 🙂

@AnkitSingla Тогда используйте long вместо int 🙂 Или используйте java.math.BigInteger , его bitLength , and и rightShift . Для BigInteger также есть встроенный метод преобразования: public String toString(int radix) , просто вызовите его с 16 в качестве radix .

 public static String decToHex(int dec)

Мне нужна функция, которая принимает int dec и возвращает шестнадцатеричный String.

Я нашел более элегантное решение от 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) < int digit = d % base; // rightmost digit hex = digits.charAt(digit) + hex; // string concatenation d = d / base; >return hex; > 

Отказ от ответственности: я использую этот алгоритм в своем интервью по кодированию. Я надеюсь, что это решение не станет слишком популярным:)

Изменить 17 июня 2016 г.. Я добавил переменную base , чтобы придать гибкость в любую базу: двоичную, восьмеричную, базу 7.
Согласно комментариям, это решение является самым элегантным, поэтому я удалил реализацию Integer.toHexString() .

Изменить 4 сентября 2015: я нашел более элегантное решение http://introcs.cs.princeton.edu/java/31datatype/Hex2Decimal.java.html

Это мой предпочтительный ответ, так как это лучшее представление о том, что вы на самом деле будете делать вручную. Очень элегантно.

Рассмотрим метод dec2m для преобразования из dec в hex, oct или bin.

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; > > 
public String DecToHex(int dec)< char[] hexDigits = ; String hex = ""; while (dec != 0) < int rem = dec % 16; hex = hexDigits[rem] + hex; dec = dec / 16; >return hex; > 

Ответы только кода не говорят много. Пожалуйста, добавьте объяснение, почему вы думаете, что ваш код является решением.

У вас есть реализация для преобразования обратно из HEX STRING в Integer? Или вообразить, что я хочу изменить цифры и создать другую базу, например, базу 20?

это небольшая библиотека, которая должна помочь вам с шестнадцатеричными в Java: https://github.com/PatrykSitko/HEX4J

Следующее преобразует десятичную дробь в шестнадцатеричную десятичную с временной сложностью: O (n) Линейное время без какой-либо встроенной функции Java

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(); > 

Ознакомьтесь с приведенным ниже кодом для преобразования десятичного в шестнадцатеричное,

import java.util.Scanner; public class DecimalToHexadecimal < public static void main(String[] args) < int temp, decimalNumber; String hexaDecimal = ""; char hexa[] = ; 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 конвертировать десятичную в шестнадцатеричную.

Лучшее решение для преобразования Decimal To 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); > > 
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; > 

Код для преобразования DECIMAL -to- > BINARY, OCTAL, HEXADECIMAL

public class ConvertBase10ToBaseX < enum Base < /** * Integer is represented in 32 bit in 32/64 bit machine. * There we can split this integer no of bits into multiples of 1,2,4,8,16 bits */ BASE2(1,1,32), BASE4(3,2,16), BASE8(7,3,11)/* OCTAL*/, /*BASE10(3,2),*/ BASE16(15, 4, 8)< public String getFormattedValue(int val)< switch(val) < case 10: return "A"; case 11: return "B"; case 12: return "C"; case 13: return "D"; case 14: return "E"; case 15: return "F"; default: return "" + val; >> >, /*BASE32(31,5,1),*/ BASE256(255, 8, 4), /*BASE512(511,9),*/ Base65536(65535, 16, 2); private int LEVEL_0_MASK; private int LEVEL_1_ROTATION; private int MAX_ROTATION; Base(int levelZeroMask, int levelOneRotation, int maxPossibleRotation) < this.LEVEL_0_MASK = levelZeroMask; this.LEVEL_1_ROTATION = levelOneRotation; this.MAX_ROTATION = maxPossibleRotation; >int getLevelZeroMask() < return LEVEL_0_MASK; >int getLevelOneRotation() < return LEVEL_1_ROTATION; >int getMaxRotation() < return MAX_ROTATION; >String getFormattedValue(int val) < return "" + val; >> public void getBaseXValueOn(Base base, int on) < forwardPrint(base, on); >private void forwardPrint(Base base, int on) < int rotation = base.getLevelOneRotation(); int mask = base.getLevelZeroMask(); int maxRotation = base.getMaxRotation(); boolean valueFound = false; for(int level = maxRotation; level >= 2; level--) < int rotation1 = (level-1) * rotation; int mask1 = mask 0 ) < valueFound = true; >if(valueFound) System.out.print(base.getFormattedValue((on & mask1) >>> rotation1)); > System.out.println(base.getFormattedValue((on & mask))); > public int getBaseXValueOnAtLevel(Base base, int on, int level) < if(level >base.getMaxRotation() || level < 1) < return 0; //INVALID Input >int rotation = base.getLevelOneRotation(); int mask = base.getLevelZeroMask(); if(level > 1) < rotation = (level-1) * rotation; mask = mask else < rotation = 0; >return (on & mask) >>> rotation; > public static void main(String[] args) < ConvertBase10ToBaseX obj = new ConvertBase10ToBaseX(); obj.getBaseXValueOn(Base.BASE16,12456); // obj.getBaseXValueOn(Base.BASE16,300); // obj.getBaseXValueOn(Base.BASE16,7); // obj.getBaseXValueOn(Base.BASE16,7); obj.getBaseXValueOn(Base.BASE2,12456); obj.getBaseXValueOn(Base.BASE8,12456); obj.getBaseXValueOn(Base.BASE2,8); obj.getBaseXValueOn(Base.BASE2,9); obj.getBaseXValueOn(Base.BASE2,10); obj.getBaseXValueOn(Base.BASE2,11); obj.getBaseXValueOn(Base.BASE2,12); obj.getBaseXValueOn(Base.BASE2,13); obj.getBaseXValueOn(Base.BASE2,14); obj.getBaseXValueOn(Base.BASE2,15); obj.getBaseXValueOn(Base.BASE2,16); obj.getBaseXValueOn(Base.BASE2,17); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE2, 4, 1)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE2, 4, 2)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE2, 4, 3)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE2, 4, 4)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE16,15, 1)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE16,30, 2)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE16,7, 1)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE16,7, 2)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE256, 511, 1)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE256, 511, 2)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE256, 512, 1)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE256, 512, 2)); System.out.println(obj.getBaseXValueOnAtLevel(Base.BASE256, 513, 2)); >> 

При понижении голосов; пожалуйста, дайте автору и другим знать причину. Следовательно пост может быть улучшен.

Источник

Converting from Base 10 to 16 (Decimal to Hex) in Java

Convert an integer which is base 10, to a hexadecimal base 16 string .

Java provides various built-in options such as Integer.toString(a, 16) , or String.format(«0x%X», a) , or Integer.toHexString(a)

The solution in Java code#

public class Hexadecimal < private static final String hexDigits = "0123456789ABCDEF"; public static String convertToHex(int a) < String hexadecimal = ""; while (a >0) < int digit = a % 16; hexadecimal = hexDigits.charAt(digit) + hexadecimal; a = a / 16; >return "0x" + hexadecimal; > > 
public class Hexadecimal< private static final String HEX = "0123456789ABCDEF"; public static String convertToHex(int a)< final StringBuilder sb = new StringBuilder(""); while (a != 0) < sb.append(HEX.charAt((a & 0xf))); a = a >> 4; > return "0x" + sb.reverse().toString(); > > 
public class Hexadecimal < private static final char[] numbers = ; public static String convertToHex(int a) < if (a < 16) return "0x" + numbers[a]; return convertToHex(a/16) + numbers[a%16]; >> 

Test cases to validate our solution#

import org.junit.Test; import static org.junit.Assert.assertEquals; public class HexadecimalShould < @Test public void test ()< assertEquals("0x100",Hexadecimal.convertToHex(256)); >> 

Additional test cases#

import org.junit.Test; import java.util.HashMap; import static org.junit.Assert.assertEquals; public class HexadecimalShould < @Test public void test ()< assertEquals("0x100",Hexadecimal.convertToHex(256)); int numbers[] = new int[1000]; for (int i = 0; i < numbers.length; i++) < numbers[i] = (int)Math.floor(Math.random()*4294967295.); assertEquals((new Hex()).convertToHex(numbers[i]),Hexadecimal.convertToHex(numbers[i])); >> private class Hex < public String convertToHex(int a) < String num = ""; HashMapmapeo = new HashMap<>(); for (int i = 0; i < 10; i++) mapeo.put(i + "", i + ""); mapeo.put("10", "A"); mapeo.put("11", "B"); mapeo.put("12", "C"); mapeo.put("13", "D"); mapeo.put("14", "E"); mapeo.put("15", "F"); while (a >= 16) < num += mapeo.get(a % 16 + "") + ""; a /= 16; >num += mapeo.get(a + ""); return "0x"+(new StringBuilder(num)).reverse().toString(); > > > 
  1. String polynomial converter in Java
  2. How to Remove all Exclamation Marks from a String in Java
  3. How to Convert a Number to a String in Java
  4. How to Remove Spaces in a String in Java
  5. How many stairs will Suzuki climb in 20 years? in Java
  6. Determine if N is divisible by X and Y in Java
  7. How to Sum a Mixed Array in Java
  8. Calculate the Volume of a Cuboid in Java
  9. Find the first non-consecutive number in Java
  10. Alternating String Casing in Java

Источник

Перевод из десятичной в шестнадцатеричную систему счисления java

Java Decimal to Hex conversion: Custom Logic

We can convert decimal to hex in java using custom logic.

Hexadecimal of 10 is: A Hexadecimal of 15 is: F Hexadecimal of 289 is: 121

Youtube

For Videos Join Our Youtube Channel: Join Now

Feedback

Help Others, Please Share

facebook twitter pinterest

Learn Latest Tutorials

Splunk tutorial

SPSS tutorial

Swagger tutorial

T-SQL tutorial

Tumblr tutorial

React tutorial

Regex tutorial

Reinforcement learning tutorial

R Programming tutorial

RxJS tutorial

React Native tutorial

Python Design Patterns

Python Pillow tutorial

Python Turtle tutorial

Keras tutorial

Preparation

Aptitude

Logical Reasoning

Verbal Ability

Company Interview Questions

Artificial Intelligence

AWS Tutorial

Selenium tutorial

Cloud Computing

Hadoop tutorial

ReactJS Tutorial

Data Science Tutorial

Angular 7 Tutorial

Blockchain Tutorial

Git Tutorial

Machine Learning Tutorial

DevOps Tutorial

B.Tech / MCA

DBMS tutorial

Data Structures tutorial

DAA tutorial

Operating System

Computer Network tutorial

Compiler Design tutorial

Computer Organization and Architecture

Discrete Mathematics Tutorial

Ethical Hacking

Computer Graphics Tutorial

Software Engineering

html tutorial

Cyber Security tutorial

Automata Tutorial

C Language tutorial

C++ tutorial

Java tutorial

.Net Framework tutorial

Python tutorial

List of Programs

Control Systems tutorial

Data Mining Tutorial

Data Warehouse Tutorial

Javatpoint Services

JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.

  • Website Designing
  • Website Development
  • Java Development
  • PHP Development
  • WordPress
  • Graphic Designing
  • Logo
  • Digital Marketing
  • On Page and Off Page SEO
  • PPC
  • Content Development
  • Corporate Training
  • Classroom and Online Training
  • Data Entry

Training For College Campus

JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week

Like/Subscribe us for latest updates or newsletter RSS Feed Subscribe to Get Email Alerts Facebook Page Twitter Page YouTube Blog Page

Источник

Оцените статью