Page 1 sur 1

[R] Conversion uint32 to uint8

Posté : sam. 03 sept. 2016 00:17
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 !

Re: [..] Conversion uint32 to uint8

Posté : sam. 03 sept. 2016 00:57
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...

Re: [R] Conversion uint32 to uint8

Posté : sam. 03 sept. 2016 08:10
par mdanielm
Et ça:
Mod($n,256)
?

Re: [R] Conversion uint32 to uint8

Posté : sam. 03 sept. 2016 15:11
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

Re: [R] Conversion uint32 to uint8

Posté : dim. 11 sept. 2016 20:34
par shiirosan
Vos solution semble nettement plus simple :P Merci à vous deux. Et merci pour la source orax.