Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD17] conversion hexa en base 24

5 réponses
Avatar
JeAn-PhI
bonjour

je souhaite convertir une chaine hexa en base 24.

j'ai à peu près tout essayer ce que j'ai pu trouver mais je dois m'y
prendre comme un manche car je n'arrive pas au résultat escompté

voici un code vbs qui fonctionne parfaitement

Set WshShell = CreateObject("WScript.Shell")
MsgBox ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\DigitalProductId"))

Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur \ 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 - i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = "-" & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function

c'est la fonction de conversion que je n'arrive pas à traduire

la valeur du paramètre "key" je peux soit avoir une chaine hexa, un
tableau hexa, un tableau d'entier je ne sais pas ce que renvoi la
fonction vbs "regread" pour un "reg_binary"

j'aimerais éviter d'utiliser du vbs

merci

--
Cordialement JeAn-PhI

5 réponses

Avatar
JeAn-PhI
JeAn-PhI a émis l'idée suivante :
bonjour

je souhaite convertir une chaine hexa en base 24.

j'ai à peu près tout essayer ce que j'ai pu trouver mais je dois m'y prendre
comme un manche car je n'arrive pas au résultat escompté

voici un code vbs qui fonctionne parfaitement

Set WshShell = CreateObject("WScript.Shell")
MsgBox ConvertToKey(WshShell.RegRead("HKLMSOFTWAREMicrosoftWindows
NTCurrentVersionDigitalProductId"))

Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 - i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = "-" & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function

c'est la fonction de conversion que je n'arrive pas à traduire

la valeur du paramètre "key" je peux soit avoir une chaine hexa, un tableau
hexa, un tableau d'entier je ne sais pas ce que renvoi la fonction vbs
"regread" pour un "reg_binary"

j'aimerais éviter d'utiliser du vbs

merci



voici la réponse :
szScriptVBS est une chaîne
autScriptVBS est un objet Automation
"MSScriptControl.ScriptControl"

szScriptVBS = [
FUNCTION ConvertToKey(ArchOs)
Const HKLM = &H80000002
Arch_OS = ArchOS
Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
Select CASE Arch_OS
CASE "32", ""
objCtx.Add "__ProviderArchitecture", 32
CASE "64"
objCtx.Add "__ProviderArchitecture", 64
END Select
Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
Set objServices =
objLocator.ConnectServer(strComputer,"rootdefault","","",,,,objCtx)
Set objStdRegProv = objServices.Get("StdRegProv")
Set Inparams =
objStdRegProv.Methods_("GetBinaryValue").Inparameters
Inparams.Hdefkey = HKLM
Inparams.Ssubkeyname = "SOFTWAREMicrosoftWindows
NTCurrentVersion"
Inparams.Svaluename = "DigitalProductId"
Set Outparams = objStdRegProv.ExecMethod_("GetBinaryValue",
Inparams,,objCtx)
Key = Outparams.uValue
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
DO
Cur = 0
x = 14
DO
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur 24) AND 255
Cur = Cur Mod 24
x = x -1
LOOP WHILE x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
IF (((29 - i) Mod 6) = 0) AND (i <> -1) THEN
i = i -1
KeyOutput = "-" & KeyOutput
END IF
LOOP WHILE i >= 0
ConvertToKey = KeyOutput
END FUNCTION
]
szArchOS est une chaîne = SysVersionWindows(sysProcesseur)


autScriptVBS>>Language("VBScript")
autScriptVBS>>Reset
autScriptVBS>>AddCode(szScriptVBS)
autScriptVBS>>Timeout(-1)
szKey est chaîne = autScriptVBS>>Run("ConvertToKey",szArchOS)
Info(szKey)

--
Cordialement JeAn-PhI
Avatar
tt
Le Thu, 19 Jun 2014 15:36:51 +0200, JeAn-PhI a écri t:

JeAn-PhI a émis l'idée suivante :
bonjour

je souhaite convertir une chaine hexa en base 24.





[...]



Bonjour,

Cela fait plus que base 16 -> base 24. Je pense que cela devrait pouvoir
sans douleur être fait en WD ?
Aurais-je mal compris la question?

--
Thumain Thérèse
Avatar
JeAn-PhI
tt avait écrit le 19/06/2014 :
Le Thu, 19 Jun 2014 15:36:51 +0200, JeAn-PhI a écrit:

JeAn-PhI a émis l'idée suivante :
bonjour

je souhaite convertir une chaine hexa en base 24.





[...]



Bonjour,

Cela fait plus que base 16 -> base 24. Je pense que cela devrait pouvoir sans
douleur être fait en WD ?
Aurais-je mal compris la question?



non c'est bien un conversion base 16 -> base 24 seulement le resultat
est à choisir parmi la liste :

explication complète ici :
http://forums.gearboxsoftware.com/showthread.php?tW316

d'ailleurs n'importe quel convertisseur base 16 en base 24 dispo sur
internet donne le bon résultat il suffit de faire ensuite le lien entre
le résultat et les valeurs possibles

Final Step:
Take your base 24 string, and replace the characters like this

0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N *
| | | | | | | | | | | | | | | | | | | | | | | |
B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9 **

* : le résultat de la conversion ne contient que ces caractères
** : correspondance pour obtenir le résultat final

--
Cordialement JeAn-PhI
Avatar
JeAn-PhI
JeAn-PhI avait soumis l'idée :
tt avait écrit le 19/06/2014 :
Le Thu, 19 Jun 2014 15:36:51 +0200, JeAn-PhI a écrit:

JeAn-PhI a émis l'idée suivante :
bonjour

je souhaite convertir une chaine hexa en base 24.





[...]



Bonjour,

Cela fait plus que base 16 -> base 24. Je pense que cela devrait pouvoir
sans douleur être fait en WD ?
Aurais-je mal compris la question?



non c'est bien un conversion base 16 -> base 24 seulement le resultat est à
choisir parmi la liste :

explication complète ici :
http://forums.gearboxsoftware.com/showthread.php?tW316

d'ailleurs n'importe quel convertisseur base 16 en base 24 dispo sur internet
donne le bon résultat il suffit de faire ensuite le lien entre le résultat et
les valeurs possibles

Final Step:
Take your base 24 string, and replace the characters like this

0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N *
| | | | | | | | | | | | | | | | | | | | | | | |
B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9 **

* : le résultat de la conversion ne contient que ces caractères
** : correspondance pour obtenir le résultat final



je rajoute faites le test en utilisant le convertisseur suivant pour
l'étape 8 et 9 :

http://converter.eu/numbers/#1_Hexadecimal_in_Base-24

--
Cordialement JeAn-PhI
Avatar
JeAn-PhI
JeAn-PhI avait écrit le 18/06/2014 :
bonjour

je souhaite convertir une chaine hexa en base 24.

j'ai à peu près tout essayer ce que j'ai pu trouver mais je dois m'y prendre
comme un manche car je n'arrive pas au résultat escompté

voici un code vbs qui fonctionne parfaitement

Set WshShell = CreateObject("WScript.Shell")
MsgBox ConvertToKey(WshShell.RegRead("HKLMSOFTWAREMicrosoftWindows
NTCurrentVersionDigitalProductId"))

Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 - i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = "-" & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function

c'est la fonction de conversion que je n'arrive pas à traduire

la valeur du paramètre "key" je peux soit avoir une chaine hexa, un tableau
hexa, un tableau d'entier je ne sais pas ce que renvoi la fonction vbs
"regread" pour un "reg_binary"

j'aimerais éviter d'utiliser du vbs

merci



voici une autre solution en full WL, merci à Jurassik Pork :

bufBuffer est un Buffer sur 2048
HKEY_LOCAL_MACHINE est un entier = 0x80000002
KEY_QUERY_VALUE est un entier = 0x1
KEY_WOW64_64KEY est un entier = 0x0100
RetourFonction est un entier // Type C :LONG
phkResult est un entier système // Type C :PHKEY
lpcbData est un entier système
lpcbData = 2048
i,j sont des entiers
keyStartIndex est un entier = 53
keyEndIndex est un entier = keyStartIndex + 15
decodeLength est un entier = 29
decodeStringLength est un entier = 15
decodedChars est un Buffer sur 29 octets
hexPid est un tableau dynamique d' octets
digits est un Buffer = "BCDFGHJKMPQRTVWXY2346789"

RetourFonction=API("ADVAPI32.DLL","RegOpenKeyExA",HKEY_LOCAL_MACHINE,
...
"SOFTWAREMicrosoftWindows NTCurrentVersion",0, KEY_QUERY_VALUE |
KEY_WOW64_64KEY,&phkResult)
RetourFonction=API("ADVAPI32.DLL","RegQueryValueExA",phkResult,
"DigitalProductId",0,0,&bufBuffer,&lpcbData)

POUR i = keyStartIndex A keyEndIndex
TableauAjoute(hexPid,bufBuffer[[i]])
FIN
POUR i = decodeLength A 1 PAS -1

SI (modulo(i,6) = 0)
decodedChars[[i]]= Asc("-")
SINON
digitMapIndex est un entier = 0
POUR j = decodeStringLength A 1 PAS -1
byteValue est un entier = bitDécaleGauche(digitMapIndex,8) |
hexPid[j]
hexPid[j] = byteValue / 24
digitMapIndex = modulo(byteValue,24)
decodedChars[[i]] = digits[[digitMapIndex+1]]
FIN
FIN
FIN

Trace (decodedChars)

--
Cordialement JeAn-PhI