[R] Conversion uint32 to uint8

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
shiirosan
Niveau 2
Niveau 2
Messages : 21
Enregistré le : sam. 07 juil. 2012 10:04
Status : Hors ligne

[R] Conversion uint32 to uint8

#1

Message par shiirosan »

Bonjour/Bonsoir à tous (toutes peut-être ? :P)

J'ai un code en java qui me pose une colle actuellement vis-à-vis d'une reconversion en autoit. Je m'explique :

Dans mon code java j'ai ceci :

Code : Tout sélectionner

array[n3] = (byte) time;
Sachant qu'à la base, time est un long représentant le temps en secondes depuis l'EPOCH.
Mon problème ce pose lors de mon "cast". Comment retranscrire cela en autoIT? J'ai déjà fais quelque recherche sur le net et je n'ai rien trouvé de fructueux...

Je remerci par avance toutes les personnes qui peuvent me fournir une quelconque aide !
Modifié en dernier par shiirosan le sam. 03 sept. 2016 00:57, modifié 1 fois.
shiirosan
Niveau 2
Niveau 2
Messages : 21
Enregistré le : sam. 07 juil. 2012 10:04
Status : Hors ligne

Re: [..] Conversion uint32 to uint8

#2

Message par shiirosan »

J'ai finalement réussi. Pour les personnes intéressé :

Code : Tout sélectionner

Func uint32_To_uint8($Int32)
	Local $i, $sBinChar = ""
	If StringRegExp($Int32, '[[:digit:]]') Then
		$i = 1
		Do
			$x = 16 ^ $i
			$i += 1
			; Determine the Octets
		Until $Int32 < $x

		For $n = 4 * ($i - 1) To 1 Step -1
			If BitAND(2 ^ ($n - 1), $Int32) Then
				$sBinChar &= "1"
			Else
				$sBinChar &= "0"
			EndIf
		Next
	Else
		Return -1
	EndIf
	$sBinCharLen = StringLen($sBinChar)
	$sBinCharMid = StringMid($sBinChar, $sBinCharLen - 7)
	If StringRegExp($sBinCharMid, '[0-1]') Then
		$lngResult = 0
		For $intIndex = StringLen($sBinCharMid) To 1 Step -1
			$strDigit = StringMid($sBinCharMid, $intIndex, 1)
			Select
				Case $strDigit = "0"
				Case $strDigit = "1"
					$lngResult = $lngResult + (2 ^ (StringLen($sBinCharMid) - $intIndex))
				Case Else
					$lngResult = 0
					$intIndex = 0
			EndSelect
		Next
		Return $lngResult
	Else
		Return -2
	EndIf
EndFunc   ;==>uint32touint8
Sans rentrer dans les détails je converti ma valeur en binaire, je vire tout les premiers bits excepté les 8 derniers puis je reconverti en decimal. Je devine aisément que mon code est long d'être optimale, libre à vous de l'optimiser tant que vous le partager ici :P

EDIT: Le code n'est pas de moi, j'ai trouvé qqn qui à coder un convertisseur binaire, hexa, deci sur le forum anglais et j'ai récupérer les parties dont j'avais besoin. Je l'aurais bien cité mais je n'arrive pas à remettre la main sur le post...
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [R] Conversion uint32 to uint8

#3

Message par mdanielm »

Et ça:
Mod($n,256)
?
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [R] Conversion uint32 to uint8

#4

Message par orax »

C'est bien plus court ! :)
Je n'avais pas pensé au modulo, j'ai eu un raisonnement un peu différent. Je le mets pour l'exemple.
$num = 123456789
$num = BitShift($num, -24) ; 32 bits - 8 bits = 24 bits
$num = BitShift($num, 24)
ConsoleWrite($num & @CRLF)
Le code n'est pas de moi, j'ai trouvé qqn qui à coder un convertisseur binaire, hexa, deci sur le forum anglais et j'ai récupérer les parties dont j'avais besoin. Je l'aurais bien cité mais je n'arrive pas à remettre la main sur le post...
Converter - Dec - Hex - Bin
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
shiirosan
Niveau 2
Niveau 2
Messages : 21
Enregistré le : sam. 07 juil. 2012 10:04
Status : Hors ligne

Re: [R] Conversion uint32 to uint8

#5

Message par shiirosan »

Vos solution semble nettement plus simple :P Merci à vous deux. Et merci pour la source orax.
Répondre