Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: [VB] &HFFS :cos'è?

  1. #1

    [VB] &HFFS :cos'è?

    Salve a tutti,
    devo tradurre una funzione da VB in Delphi ma non capisco il significato di una istruzione:

    codice:
      dim lrc,lolrc as short
      ..
      lrc = lrc And &HFFS
      lolrc = lrc And &HFS
    cosa stanno a significare &HFFS e &HFS che risultato producono queste istruzioni?

    Grazie a tutti.
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Moderazione

    Di quale versione di VB parliamo?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3

    Re: Moderazione

    Originariamente inviato da alka
    Di quale versione di VB parliamo?
    penso la 6 penso perchè mi hanno dato solo la funzione per calcolare la somma ad 8 bit dei caratteri di una stringa:

    codice:
    Public Function LRCCalc(ByVal WRPG As String) As String
            Dim hilrc, lrc, Index, lolrc As Short
            Dim Calc_LRC, strData As String
    
            strData = Chr(2) & Trim(WRPG) & Chr(3)
    
            If Len(strData) <> 0 Then
    
                For Index = 1 To Len(strData)
    
                    lrc = lrc + Asc(Mid(strData, Index, 1))
    
                Next
    
                lrc = lrc And &HFFS
    
                lolrc = lrc And &HFS
    
                hilrc = Int(lrc / 16)
    
                hilrc = hilrc + 48
    
                If hilrc > 57 Then hilrc = hilrc + 7
    
                lolrc = lolrc + 48
    
                If lolrc > 57 Then lolrc = lolrc + 7
    
                Calc_LRC = Chr(hilrc) & Chr(lolrc)
    
            Else
    
                Calc_LRC = ""
    
            End If
    
            Return (Calc_LRC)
    
        End Function
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non puo' essere &HFFS ... ci sara' stato un errore di lettura/trascrizione ... semmai l'ultimo carattere e' un &

    Sara' quindi

    codice:
    lrc = lrc And &HFF&
    
    lolrc = lrc And &HF&
    Sono quindi i valori

    255

    e

    15

    espressi in esadecimale con un tipo di dato Long
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    760
    E' VB .NET, lo si desume dal modo di dichiarare le variabili e dal fatto che in VB6 non è possibile usare la forma &H...S per rappresentare costanti esadecimali con segno (questo significa la S).

  6. #6
    Originariamente inviato da Grumpy
    E' VB .NET, lo si desume dal modo di dichiarare le variabili e dal fatto che in VB6 non è possibile usare la forma &H...S per rappresentare costanti esadecimali con segno (questo significa la S).
    ok..

    queste due istruzioni cosa stanno a significare?
    come le traduco in delphi? o se non conoscete il delphi fatemi capire cosa fa!
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Giusto ... ma sono sempre i valori 255 e 15

    La prima linea effettua l'AND bit a bit tra la variabile e 255 e la seconda lo stesso ma con il valore 15

    In pratica, in

    lrc

    avrai il resto della divisione per 256

    e in

    lolrc

    il resto della divisione per 16
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    760
    E' "And" l'operatore, non &HFFS.
    L'operatore And (in tutti i linguaggi) esegue un prodotto logico bit a bit tra i due operandi che, in questo caso, sono rappresentati dalla variabile lrc e dalla costante esadecimale &HFFS.

    Supponendo che il primo operando valga 9, che in binario è 1001
    e che il secondo operando valga 3, che in binario è 0011

    9 And 3 darà come risultato 1, che in binario è 0001

    in quanto solo il bit più a destra vale 1 in entrambi gli operandi

  9. #9
    quindi così è corretto:

    codice:
    function LRCCalc(var WRPG :String):string;
    var
      hilrc, lrc, Index, lolrc: short;
      Calc_LRC, strData:String;
    begin
      strData:= Chr(2)+Trim(WRPG)+Chr(3);
      If Length(strData) <> 0 Then
      begin
        For Index:= 1 To Length(strData) do
          lrc:= lrc +ord(  strData[Index]  );
        lrc:= lrc And $FF;
        lolrc:= lrc And $F;
        hilrc:= trunc(lrc / 16);
        hilrc:= hilrc + 48;
        If hilrc > 57 Then
          hilrc:= hilrc + 7;
        lolrc:= lolrc + 48;
        If lolrc > 57 Then
          lolrc:= lolrc + 7;
        Calc_LRC:= Chr(hilrc)+Chr(lolrc);
      end else
        Calc_LRC:= '';
      Result:=Calc_LRC;
    End;
    cioè se in delphi la notazione esadecimale vale $"espressione numerica"

    vb: &HFFS=delphi: $FF

    Giusto? quella s finale non serve and un tubo, giusto?
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Dovrebbe ... fai la prova ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.