Преобразование числа в строку из цифр и букв
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Преобразование числа в строку из цифр и букв

Преобразование числа в строку из цифр и букв

Ответ
Поиск в этой теме
Непрочитано 16.10.2010, 11:09 #1
Преобразование числа в строку из цифр и букв
gomer
 
строю, ломаю
 
Украина
Регистрация: 03.04.2008
Сообщений: 5,515

Дано число, нужно преобразовать его в строку из цифр и английский букв в верхнем регистре... По типу перевода из 10-тичной системы в 16-ричную...
Как это реализовать?
Просмотров: 5387
 
Непрочитано 16.10.2010, 12:56
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Это называется перевод из десятичной системы счисления в шестнадцатиричную
Как вариант фунции можно посмотреть здесь: RGB_color в OLE_color как это сделать?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.10.2010, 13:01
#3
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


gomer, если правильно понял вопрос, то может так сойдет

Код:
[Выделить все]
(defun Dec->Hex(value / lst_conv str)
  (setq lst_conv (list '(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")))
  (setq str "")
  (while (> (/ value 16) 0)
    (setq str (strcat (cadr (assoc (rem value 16) lst_conv)) str))
    (setq value (/ value 16))
    )
  (strcat (cadr (assoc value lst_conv)) str)
  )
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 16.10.2010, 13:16
#4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Ну, почти...
Только список lst_conv должен быть любой конфигурации... например,
(setq lst_conv (list "0" "1" "2" "3" "4" "A" "B" "C" ... "X" "Y" "Z"))
(setq lst_conv (list "0" "1"))
(setq lst_conv (list "0" "1" "5" "6" "X" "Y" "7" ... "8" "9"))
gomer вне форума  
 
Непрочитано 16.10.2010, 13:57
#5
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от gomer Посмотреть сообщение
Только список lst_conv должен быть любой конфигурации... например,
(setq lst_conv (list "0" "1" "2" "3" "4" "A" "B" "C" ... "X" "Y" "Z"))
(setq lst_conv (list "0" "1"))
(setq lst_conv (list "0" "1" "5" "6" "X" "Y" "7" ... "8" "9"))
Что-то я тогда совсем запутался, я конечно понял, что нужно не просто перевод из десятичной в шестнадцатеричную систему. Лучше приведи пример исходного числа и строки, которая должна получиться, по по какому правилу?
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 16.10.2010, 14:43
#6
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


например,
0 - "0"
1 - "1"
2 - "2"
36 - "Z"
37 - "Z1"
38 - "Z2"
142892217 - "????????????"
gomer вне форума  
 
Непрочитано 16.10.2010, 14:54
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Код:
[Выделить все]
//Сохраняем целое число 182
int decValue = 182;
// Преобразовываем целое число 182 в шестнадцатеричное строковое представление
string hexValue = decValue.ToString("X");
// Выполняем обратное преобразование
int decAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
этот код можно упаковать в лисп-функцию.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 16.10.2010, 15:36
#8
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от gomer Посмотреть сообщение
например,
0 - "0"
1 - "1"
2 - "2"
36 - "Z"
37 - "Z1"
38 - "Z2"
142892217 - "????????????"
Да уж, тиха украинская ночь... Ну допустим из примера можно предположить, что раз уж 36 - "Z, то наверное":
10 - "A"
11 - "B"
...
36 - "Z"
тогда почему 37 - "Z1"?, а не скажем "A1"? И если уж так, то как я понимаю должно быть 47 - "ZA", 48 - "ZB", ... , 73 - "ZZ", 74 - "ZZ1" и так далее. С другой стороны это не вяжется с твоим постом #4 (Только список lst_conv должен быть любой конфигурации). Судя по всему ты хочешь, чтобы в списке lst_conv модно было задать некий ключ шифрования по которому бы и производился перевод числа в строку. Если не правильно интерпретировал твой пример, то объясни по подробнее, что к чему?

А может так надо:

Код:
[Выделить все]
; (Dec->Str 2837 (list "0" "1")) вернет "101100010101" - т. е. 2837 в DEC перевели в BIN 101100010101
; (Dec->Str 2837 (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F")) вернет "B15" - т. е. 2837 в DEC перевели в HEX B15

(defun Dec->Str(value lst_conv / count lst_conv str)
  (setq str ""
    count (length lst_conv))
  (while (> (/ value count) 0)
    (setq str (strcat (nth (rem value count) lst_conv) str))
    (setq value (/ value count))
    )
  (strcat (nth value lst_conv) str)
  )
__________________
cadtools

Последний раз редактировалось TararykovDG, 16.10.2010 в 15:50.
TararykovDG вне форума  
 
Автор темы   Непрочитано 16.10.2010, 16:01
#9
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
тогда почему 37 - "Z1"?
ЭЭЭЭЭЭ... Прощу прощения....
По аналогии с DecToHex
37 - 10
38 - 11
Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Судя по всему ты хочешь, чтобы в списке lst_conv модно было задать некий ключ шифрования по которому бы и производился перевод числа в строку.
Вот вы меня сразу рассекретили...

Цитата:
А может так надо:
зы пасиб, буду пробовать...
Осталось написать обратную функцию

Последний раз редактировалось gomer, 16.10.2010 в 16:06.
gomer вне форума  
 
Непрочитано 16.10.2010, 16:43
1 | #10
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


gomer, обратная функция
Код:
[Выделить все]
_$ (setq lst_conv (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"))
("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z")
_$ (Dec->Str 48256 lst_conv)
"118G"
_$ (Str->Dec "118G" lst_conv)
48256

(defun Dec->Str(value lst_conv / count str)
  (setq str ""
	count (length lst_conv)
	)
  (while (> (/ value count) 0)
    (setq str (strcat (nth (rem value count) lst_conv) str))
    (setq value (/ value count))
    )
  (strcat (nth value lst_conv) str)
  )

(defun Str->Dec(str lst_conv / count value)
  (setq value 0
	count (length lst_conv)
	)
  (while (/= str "")
    (setq value (+ value (* (vl-position (substr str 1 1) lst_conv) (expt count (1- (strlen str)))))
	  str (substr str 2)
	  )
    )
  value
  )
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 16.10.2010, 16:58
#11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Ну и еще одна ссылочка Можно ли из нескольких лиспов и меню сделать программу с активационным ключом?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Преобразование числа в строку из цифр и букв



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сквозная нумерация динамических блоков zenon Программирование 214 28.08.2020 08:45
Как преобразовать строку вида "..." в строку "\"...\"" и далее в строку "\"\"...\"\""? Supermax Программирование 2 10.10.2010 13:19
Как избежать увеличений букв и цифр в лайоте при изменении масштаба? Elbrus AutoCAD 13 09.11.2009 14:01
DwgRuLispLib: Преобразование значения в строку Кулик Алексей aka kpblc Библиотека функций 26 06.12.2007 19:30