T'as tout compris, Len prenant un string en entier, la conversion est faite automatiquement
Version imprimable
Aaargh ! :vomi:
Et maintenant je vois beaucoup mieux comment fonctionne la methode originale
Moi Aussi :roll::mouarf:Citation:
Je viens de demander directement au concepteur de la méthode ce qu'elle devait faire exactement. j'attend sa réponse.
Sehnsucht est sur la bonne piste mais il manque encore qq chose
Après analyse, j'en suis sûr : ce code fait n'importe quoi.
- un nom de méthode qui veut rien dire
- 4 ou 5 variables déclarées mais inutilisées
- conversion d'un int en chaîne (n base 10), tripatouillage de la chaîne, puis reconversion en int en considérant la chaîne en base 16
- condition while avec rank < 31 qui va encore diminuer rank de 16
Ca fait beaucoup pour si peu de lignes :)
Tiens ! ?
Pol63 est passé et s'est vite rétracté
Bonjour Pol63 ;)
oui, j'étais pas si sur de ma réponse finalement :D
Bonjour à tous,
je suis crevé, 6 heures à bossé sur un sujet sa crève...
Bon j'ai quelque info mais j'ai pas encore regardé de mon coté, je viens de rentrer.
Mon maitre de stage m'a envoyé un mail avec ce que j'aurais du avoir, car je dit bien j'aurais....
En faite vous aviez raison, et pour moi cela me parait plus logique, le Type de bit est bien un String et non un int. Du coup tout s'éclaire. Je comprend donc pas pourquoi cela marche mon code et pourquoi j'aurais modifié une méthode que l'on m'a donnée....
En ce qui concerne ce que je récupère c'est en hexadécimal.
Je pense avoir une idée du fait que cela marchais, avec le simulateur je n'est tester que les 1ere valeur, j'ai pas été plus loin. Bon je vais chercher m'a fille et je fait d'autre essaie.
Maintenant si c'est bien un String j'ai plus de souci de conversion. Mise à part la fonction IIf.
Citation:
Bon ba j'y retourne...
C'est vraiment dur de se remettre aux études à près de 40 ballets
:calim2:Citation:
Bonjour à tous,
je suis crevé, 6 heures à bossé sur un sujet sa crève...
Allez arrete de pleurer t'est pas le seul a bosser tu sais !
Et 6h c'est pas bien lourd
Ce que tu dis la ne correspond pas du tout a au prototype et au retour de la fonction que tu a envoyé au début :?8OCitation:
En faite vous aviez raison, et pour moi cela me parait plus logique, le Type de bit est bien un String et non un int.
En ce qui concerne ce que je récupère c'est en hexadécimal.
Code:
1
2
3 Public Function Supervision1(ByVal bit As Integer, ByVal indice As Integer) As Integer Supervision1= IIf((nval And 2 ^ Rank) > 0, 1, 0) End Function
Je sais ce que c'est de bossé cela fait 20 ans que je suis salarié de plus reprendre les études avec un cursus standard après 20 ans n'est pas donné à tout le monde non plus, je m'accroche et c'est pas facile tout les jours quand en plus on a une vie de famille.. Mais il y a un monde entre bossé 6 heures d'affiler sans manger pour un examen même s'il est blanc avec la routine au boulot.
Comme je l'ai déjà dit à mainte reprise, je n'avais pas analyse la fonction et ce que je lui envoyais. J'ai simplement fait un copier coller de ce que l'on m'a donnée et mes 1er essaie marchait, j'ai donc supposé que c'était bon puisque la méthode que j'ai utilisé est encore utilisé dans d'autre produit.Citation:
Ce que tu dis la ne correspond pas du tout a au prototype et au retour de la fonction que tu a envoyé au début :
C'est simplement lorsque j'ai voulu le convertir en C# que le problème est apparu. Après avoir demandé sur ce forum une conversion, il s'avère qu'il y à un souci.
je viens de demander l'info aux personnes qui ont créent ce code à la base et ils viennent de me répondre comme quoi on doit envoyer un code sous le type string et non int comme il me semblais être, et le string symbolise un code en Hexadécimal.
En retour je dois bien avoir un Int correspondant à un 0 ou un 1 symbolisant l'alarme recherchée.
Voici donc le code modifier, j'ai enlever aussi les variables inutile:
Il me reste à la traduire en C#Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Public Function GCAU(ByVal bit As String, ByVal indice As Integer) As Integer Dim nbc As Integer Dim Str As String Dim i As Integer Dim nval As Long Dim Rank As Integer On Error Resume Next Rank = indice nbc = Len(bit) Mod 2 'Mise au format &Hxx -> on complette par 0 si besoin Str = IIf(nbc = 1, "0" & bit, bit) While Rank <= 31 And Len(Str) >= 8 Str = Mid(Str, Len(Str) - 4) Rank = Rank - 16 End While nval = Val("&H" & Str) i = Val(Str And CStr(Hex(2 ^ Rank))) GCAU = IIf((nval And 2 ^ Rank) > 0, 1, 0) End Function
Dans ce cacas la solution de Sehnsucht est presque bonne
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 private int ValeurBitNombre(string Hex, int positionBit) { //Gestion des execptions if (positionBit < 0) throw new ArgumentOutOfRangeException("positionBit", positionBit, "doit être supérieur ou égal à 0."); // ATTENTION il faut veiller a ce que le string soit de l'Hexa mode C // : soit "0xABCDEF01" ou "ABCDEF01" // MAIS pas en mode BASIC : "&HABCDEF01" Hex=Hex.ToUpper().Replace("&H","0x"); // Conversion en int du string int iHex = Int32.Parse( Hex, System.Globalization.NumberStyles.HexNumber ); // Autre possibilité de conversion int iHex = Convert.ToInt32( Hex, 16 ); return (iHex >> positionBit) & 1; }
Merci beaucoup
Je modifie mon code VB.net pour qu'il utilise bien un String.
J'ai pas mal de petite modif à faire, pas bien méchante mais certaine supervision n'ont pas besoin de rechercher l'alarme dans le code, elles sont directe 0 ou 1 je transformais tout de suite en Int ce qui n'est pas a faire si j'ai besoin d'utilisé la fonction.
Me revoici avec mes tests plus poussé.
J'ai compris comment était générer le Code d'alarme
Exemple:
Bit nr.....|....Hex Mask...|...Weight in..| event
0..............0000 000X...........1............Alarme 1
1..............0000 000X...........2............Alarme 2
2..............0000 000X...........4............Alarme 3
3..............0000 000X...........8............Alarme 4
4..............0000 00X0...........1............Alarme 5
5..............0000 00X0...........2............Alarme 6
6..............0000 00X0...........4............Alarme 7
7..............0000 00X0...........8............Alarme 8
8..............0000 0X00...........1............Alarme 9
9..............0000 0X00...........2............Alarme 10
10.............0000 0X00..........4............Alarme 11
11.............0000 0X00..........8............Alarme 12
... etc...
31.............X000 0000..........8............Alarme 32
J'ai donc modifié le code pour qu'il prenne bien un String et Modifier le Code de la fonction.
Si j'ai bien compris comment marche le syteme lorsque je modifie la valeur dans mon simulateur j'ai exactement ce que je veux cela marche très bien:
Voici le code Modifié:
Voila cela marche très bien comme sa mais je vais demander à la personne qui m'a donner le code d'origine car c'est vraiment simplifié.Code:
1
2
3
4
5 Public Function Supervision1(ByVal bit As String, ByVal indice As Integer) As Integer Dim nval As Long nval = Val("&H" & bit) Supervision1 = IIf((nval And 2 ^ indice) > 0, 1, 0) End Function
Merci de votre aide
Je ne comprends pas bien pourquoi tu voulais convertir un code VB en C# si c'est un définitive pour le réécrire en VB :koi:
Et à 40 balais comme tu dis tu devrais quand même avoir appris à faire la différence entre le pronom démonstratif ça
et le possessifCitation:
ça va marcher
cela marche très bien comme ça
ça crève
Pour ne pas faire sytématiquement l'erreurCitation:
sa methode
sa fonction
ma fille et pas m'a fille
http://www.francaisfacile.com/exerci...cais-26659.php