J'ai une application où un utilisateur doit se rappeler et insérer un horodatage unix comme 1221931027. Afin de faciliter le rappel de la clé, j'aime réduire le nombre de caractères à insérer en permettant aux caractères [ az]. Je suis donc à la recherche d'un algorithme pour convertir l'horodatage en une version alphanum plus courte et faire la même chose en arrière. Des indices?Convertir timestamp en alphanum
Répondre
Vous pouvez simplement convertir l'horodatage en base-36.
Ou si vous autorisez des caractères majuscules, base62, soit près de la moitié du nombre de caractères requis. – freespace
convertir l'horodatage en HEX. Cela générera un nombre alphanumérique plus court pour vous hors de l'horodatage.
Une autre option parfois utilisée pour des choses comme ceci est d'utiliser des listes de syllabes. c'est à dire. vous avez une liste de syllabes comme ['a', 'ab', 'ba', 'bi', 'bo', 'ca', '...] et transformez le nombre en base (len (list_of_syllables)). C'est plus long en termes de lettres, mais il peut souvent être plus facile de mémoriser quelque chose comme "flobagoka" que quelque chose comme 'af3q5jl' (l'inconvénient est qu'il peut être facile de générer des mots qui ressemblent à du blasphème)
[ Modifier] Here's un exemple d'un tel algorithme. en utilisant ce, 1221931027 serait « buruvadrage »
#include <time.h>
#include <stdio.h>
// tobase36() returns a pointer to static storage which is overwritten by
// the next call to this function.
//
// This implementation presumes ASCII or Latin1.
char * tobase36(time_t n)
{
static char text[32];
char *ptr = &text[sizeof(text)];
*--ptr = 0; // NUL terminator
// handle special case of n==0
if (n==0) {
*--ptr = '0';
return ptr;
}
// some systems don't support negative time values, but some do
int isNegative = 0;
if (n < 0)
{
isNegative = 1;
n = -n;
}
// this loop is the heart of the conversion
while (n != 0)
{
int digit = n % 36;
n /= 36;
*--ptr = digit + (digit < 10 ? '0' : 'A'-10);
}
// insert '-' if needed
if (isNegative)
{
*--ptr = '-';
}
return ptr;
}
int main(int argc, const char **argv)
{
int i;
for (i=1; i<argc; ++i)
{
long timestamp = atol(argv[i]);
printf("%12d => %8s\n", timestamp, tobase36(timestamp));
}
}
/*
$ gcc -o base36 base36.c
$ ./base36 0 1 -1 10 11 20 30 35 36 71 72 2147483647 -2147483647
0 => 0
1 => 1
-1 => -1
10 => A
11 => B
20 => K
30 => U
35 => Z
36 => 10
71 => 1Z
72 => 20
2147483647 => ZIK0ZJ
-2147483647 => -ZIK0ZJ
*/
- 1. Convertir UTC en Unix Timestamp
- 2. convertir timestamp mysql à mktime
- 3. Comment convertir datetime en timestamp unix en c?
- 4. Convertir la date RFC 1123 en timestamp en PHP
- 5. Convertir le format de date de mysql TIMESTAMP help
- 6. TIMESTAMP UTC Entier
- 7. Java Timestamp valueOf
- 8. timestamp unix pour booster :: posix_time :: ptime
- 9. MySQL Timestamp Question
- 10. Impossible de convertir '0000-00-00 00:00:00' à TIMESTAMP
- 11. python postgres cursor timestamp issue
- 12. Automatisation NHibernate: Alter DateTime à Timestamp
- 13. Mysql join basé sur max (timestamp)
- 14. Convertir PDF en HTML
- 15. Convertir en Master Page
- 16. Convertir NSValue en NSDecimalNumber
- 17. Convertir NSNumber en CLCoordinate
- 18. Convertir en expression Lambda
- 19. Convertir l'image en binaire?
- 20. Convertir latin1 en utf8?
- 21. Convertir DataRowCollection en DataRow []
- 22. Convertir JPanel en image
- 23. Convertir JAL en VBScript
- 24. Convertir docx en xlsx
- 25. convertir XmlNode en XNode?
- 26. convertir xsd en WSDL?
- 27. Convertir System.Windows.Media.Brush en System.Drawing.Brush
- 28. convertir xml en table
- 29. Convertir SWF en XAML
- 30. convertir l'anglais en arabe
cela me semble une exigence bizarre. Pourriez-vous nous expliquer pourquoi vous faites cela? Peut-être qu'il ya une meilleure façon – dmckee