@krka92

Как перевести число в 16-ричное представление?

Привет всем. Нужен какой-нибудь алгоритм, который переведёт число А в строку S. В строке число должно быть представлено в 16-чной СС.
Заранее спасибо
  • Вопрос задан
  • 148 просмотров
Решения вопроса 3
sergiks
@sergiks Куратор тега Алгоритмы
♬♬
Псевдокод:
if (0 <= A  &&  A < 10) return (string) A;
else // тут уже сами допишите


А вообще вот.
Ответ написан
Комментировать
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
реализация на js
// можно обойтись и без этого массива, но для демки делаю с ним
var hexchar = [0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"].map(v=>v.toString());
function decToHex(num){
   let out = num&15;
   num = num>>>4;
   return num?decToHex(num)+hexchar[out]:hexchar[out];
}

/* тестируем */
for(var i=0; i<100; i++){
   console.log(i,"=",decToHex(i));
}


вывод в консоль
0 = 0
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 8
9 = 9
10 = A
11 = B
12 = C
13 = D
14 = E
15 = F
16 = 10
17 = 11
18 = 12
19 = 13
20 = 14
21 = 15
22 = 16
23 = 17
24 = 18
25 = 19
26 = 1A
27 = 1B
28 = 1C
29 = 1D
30 = 1E
31 = 1F
32 = 20
33 = 21
34 = 22
35 = 23
36 = 24
37 = 25
38 = 26
39 = 27
40 = 28
41 = 29
42 = 2A
43 = 2B
44 = 2C
45 = 2D
46 = 2E
47 = 2F
48 = 30
49 = 31
50 = 32
51 = 33
52 = 34
53 = 35
54 = 36
55 = 37
56 = 38
57 = 39
58 = 3A
59 = 3B
60 = 3C
61 = 3D
62 = 3E
63 = 3F
64 = 40
65 = 41
66 = 42
67 = 43
68 = 44
69 = 45
70 = 46
71 = 47
72 = 48
73 = 49
74 = 4A
75 = 4B
76 = 4C
77 = 4D
78 = 4E
79 = 4F
80 = 50
81 = 51
82 = 52
83 = 53
84 = 54
85 = 55
86 = 56
87 = 57
88 = 58
89 = 59
90 = 5A
91 = 5B
92 = 5C
93 = 5D
94 = 5E
95 = 5F
96 = 60
97 = 61
98 = 62
99 = 63


демка в ресочнице
Ответ написан
Комментировать
@krka92 Автор вопроса
procedure WriteHex;
  var
    m, Val, Len, i: Word;
    HexA: array [0 .. 3] of AnsiChar;
  begin
    Val := ch;
    Len := 0;
    while Val > 0 do
    begin
      m := Val and $F;
      Val := Val shr 4;
      case m of
        0 .. 9: HexA[Len] := AnsiChar(m + 48);
        10 .. 15: HexA[Len] := AnsiChar(m + 55);
      end;
      Inc(Len);
    end;
    BuffOut.WriteBinaryString('\u');
    if Len = 2 then BuffOut.WriteBinaryString('00');
    if Len = 3 then BuffOut.WriteBinaryChar('0');
    for i := Len - 1 downto 0 do
    begin
      BuffOut.WriteBinaryChar(HexA[i]);
    end;
  end;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы