Войти
ПрограммированиеФорумОбщее

Из числа в короткую строку, для ID игрока (5 897 436 в 3TU7 )

#0
(Правка: 16:13) 16:11, 5 ноя. 2019

Есть ли готовый алгоритм конвертирования туда обратно из числа в втроку

к примеру так - 5 897 436 в 3TU7

И какие символы вы бы стали использовать для ID игрока ?
к примеру если использовать верхний и нижний регистр, то будет труднее прочитать


#1
16:42, 5 ноя. 2019

Переводи в hex

#2
(Правка: 16:54) 16:51, 5 ноя. 2019

https://en.wikipedia.org/wiki/Base32
https://en.wikipedia.org/wiki/Base64

#3
(Правка: 17:10) 17:09, 5 ноя. 2019

njo
> https://en.wikipedia.org/wiki/Base64

оно не дает нужный эффект
5897436
преващяется
NTg5NzQzNg==

А нужно чтобы укорачивалось

#4
17:25, 5 ноя. 2019

FDsagizi
Строку в числовое значение:
std::stoi, std::stol, std::stoll и т.д.
https://en.cppreference.com/w/cpp/string/basic_string

числовое значение в строку:
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);

#5
1:00, 6 ноя. 2019

FDsagizi
> А нужно чтобы укорачивалось

Видимо тогда тебе нужно arbitrary base conversion. Конвертировать между 10-ной и 62-ой базами.

#6
1:08, 6 ноя. 2019

FDsagizi
> оно не дает нужный эффект
> 5897436
> преващяется
> NTg5NzQzNg==
>
> А нужно чтобы укорачивалось
Потому что ты не число сконвертириовал в base64, а строку.
Иди сюда:
https://v2.cryptii.com/decimal/base64
В поле слева вбивай 5897436 (важно чтобы было без пробелов)
И получишь 77Oc

#7
(Правка: 6:17) 6:17, 6 ноя. 2019

FDsagizi
https://ideone.com/bBubdZ от map сам избавишься если важна скорость. Допустимые символы можешь указать какие хочешь, главное не менее 2.

#8
7:47, 8 ноя. 2019
И какие символы вы бы стали использовать для ID игрока ?

Вообще, само понятие "ID игрока" подразумевает скорее int а не string. Странно, что вы пытаетесь в айди засунуть буквы. Обычно, размера int хватает для того, чтобы использовать подобный тип данных для идентификатора игроков.
#9
10:41, 8 ноя. 2019

ДобрыйБарин
> Вообще, само понятие "ID игрока" подразумевает скорее int а не string. Странно,
> что вы пытаетесь в айди засунуть буквы. Обычно, размера int хватает для того,
> чтобы использовать подобный тип данных для идентификатора игроков.

В базе мы храним как инт, а в самой игре, думали показывать более короткий вариант

#10
(Правка: 12:43) 12:05, 8 ноя. 2019

FDsagizi
> В базе
Можно считерить на уровне SQL, если лень заморачиваться.

mysql> SELECT u.id, CONV(u.id, 10, 36) AS base36_id FROM users u WHERE u.id=5897436

Но лучше, конечно, логику на базу не перекладывать.

ПрограммированиеФорумОбщее