A voir également:
- Probleme langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
3 réponses
Bonsoir,
Pourquoi converti tu en binaire tes valeurs RGB saisie pour ensuite les reconvertir ton binaire en hexadécimal ?
si tes valeur RGB sont des entiers ( 1 byte ) en entrée converti directement ces valeurs RGB en hexadécimal.
( DWORD >> 16 )&255 = R, ( DWORD >> 8 )&255 = G, ( DWORD )&255 = B;
( Byte R << 16 ) | ( Byte G << 8 ) | ( byte B ) = DWORD 24 bits
si tu veux reconstruire un byte avec un tableau de 1 et 0 utilise les bitwise afin de recomposer ton Byte comme si dessus ( dans une boucle ).
c'est du js mais l'algorithmique de conversion reste la même (function __ ), j'ai du le faire en python lors de ma licence. tu peux optimiser ta function 'fonction_conversion_decimal_binaire'
a est ta valeur de convertion, b ta base ( 2, 8, 16 ), f est ton tableau que tu incrémente de 0-23
reconstruit tes valeurs RGB en DWORD passe la dans ta function de convertion cela t'évitera de faire 3 boucles inutile pour ta function 'fonction_conversion_decimal_binaire'.
j'espère ne pas avoir répondu à côté de la plaque.
Bien Cdlt,
Pourquoi converti tu en binaire tes valeurs RGB saisie pour ensuite les reconvertir ton binaire en hexadécimal ?
si tes valeur RGB sont des entiers ( 1 byte ) en entrée converti directement ces valeurs RGB en hexadécimal.
( DWORD >> 16 )&255 = R, ( DWORD >> 8 )&255 = G, ( DWORD )&255 = B;
( Byte R << 16 ) | ( Byte G << 8 ) | ( byte B ) = DWORD 24 bits
si tu veux reconstruire un byte avec un tableau de 1 et 0 utilise les bitwise afin de recomposer ton Byte comme si dessus ( dans une boucle ).
c'est du js mais l'algorithmique de conversion reste la même (function __ ), j'ai du le faire en python lors de ma licence. tu peux optimiser ta function 'fonction_conversion_decimal_binaire'
(function( ){ function __( a,b,f){ var i = t = 0, ret = ""; try{ if( a == 0 ) ret = f.call( null, ret, 0 );; while( Math.floor( a ) > 0 ){ t = Math.floor( a%b ); a/= b; ret = f.call( null, ret, t ); } t = ret.split("").reverse().join(""); }catch(e){ console.log( e ); }; return t; } return{ dec2bin:function( a ){ return __( a, 2, function( r, d ){ return r+d; }); }, dec2oct:function( a ){ return __( a, 8, function( r, d ){ return r+d; }); }, dec2hex:function(a){ var al = "abcdef"; return __( a, 16, function( r, d ){ return r+( d < 10 ? d : al[ d-10 ] ); }); }, } })
a est ta valeur de convertion, b ta base ( 2, 8, 16 ), f est ton tableau que tu incrémente de 0-23
reconstruit tes valeurs RGB en DWORD passe la dans ta function de convertion cela t'évitera de faire 3 boucles inutile pour ta function 'fonction_conversion_decimal_binaire'.
j'espère ne pas avoir répondu à côté de la plaque.
Bien Cdlt,
Bonjour à tous les 2.
@kekedu38, vois tu comme le code présenté par DevGnode est bien plus agréable à lire que le tien?
Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code pour tu en fasses autant par la suite.
@kekedu38, vois tu comme le code présenté par DevGnode est bien plus agréable à lire que le tien?
Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code pour tu en fasses autant par la suite.
Comme suggéré par DevGnode, la bonne façon de faire semblerait d'utiliser les opérateurs bit à bit de décalage vers la gauche et le OU logique
@kekedu38 vois :
https://emmanuel-delahaye.developpez.com/tutoriels/c/operateurs-bit-bit-c/
Sur les types à utiliser, je n'utiliserais pas DWORD comme le fait DevGnode, car c'est un type non standard inventé par MS Windows.
kekedu38 pourrait à la place utiliser des types standards entiers non signés prévus par le C et accessibles par stdint.h permettant de disposer d'une capacité suffisante pour y stocker 24 bits (
sur ces types entiers permettant de maîtriser la taille en bits, voir :
http://www.cplusplus.com/reference/cstdint/
Dal
@kekedu38 vois :
https://emmanuel-delahaye.developpez.com/tutoriels/c/operateurs-bit-bit-c/
Sur les types à utiliser, je n'utiliserais pas DWORD comme le fait DevGnode, car c'est un type non standard inventé par MS Windows.
kekedu38 pourrait à la place utiliser des types standards entiers non signés prévus par le C et accessibles par stdint.h permettant de disposer d'une capacité suffisante pour y stocker 24 bits (
uint32_tpar exemple), les types pour les valeurs individuelles de R, V et B pouvant être affectés à des
uint8_tune fois que l'on a vérifié que la saisie était correcte avec un type de capacité plus grande (
intfait l'affaire).
sur ces types entiers permettant de maîtriser la taille en bits, voir :
http://www.cplusplus.com/reference/cstdint/
Dal
bonjour Dal,
En faite je parle en :
BYTE - 00,
WORD - 0000
DWORD - 00000000
QWORD - 0000000000000000
c'est juste pour avoir une vision plus clair en tête, après c'est à lui d'utiliser le typage le plus approprié au langage qu'il va utiliser, comme je fait pas mal ASM c'est plus clair pour avoir une vision de l'espace réelle utilisé en mémoire.
par contre lui veux avoir 4 bits je ne vois pas trop l'utilité car la valeur minimal même pour une Boolean l'espace en mémoire utilisé sera un BYTE, autant qu'il reconstruise sont BYTE mais dans sont cas cela revient à reformer les valeurs RGB de départ qu'il a en entré, c'est un peu le serpent qui se mort la queue.
:)
Cdlt,
En faite je parle en :
BYTE - 00,
WORD - 0000
DWORD - 00000000
QWORD - 0000000000000000
c'est juste pour avoir une vision plus clair en tête, après c'est à lui d'utiliser le typage le plus approprié au langage qu'il va utiliser, comme je fait pas mal ASM c'est plus clair pour avoir une vision de l'espace réelle utilisé en mémoire.
par contre lui veux avoir 4 bits je ne vois pas trop l'utilité car la valeur minimal même pour une Boolean l'espace en mémoire utilisé sera un BYTE, autant qu'il reconstruise sont BYTE mais dans sont cas cela revient à reformer les valeurs RGB de départ qu'il a en entré, c'est un peu le serpent qui se mort la queue.
:)
Cdlt,