'affiche un tableau d'octets sous forme hexadécimale sur dwDigitPerRow colonnes suivi de la représentation ASCII
'===============================================================================================================
'buff : tableau contenant les octets à afficher
'OPT dwDigitPerRow : indique le nombre de colonnes hexadécimales par lignes affichées. 16 par défaut.
'OPT bAscii : indique si l'on affiche la représentation ASCII des octets après l'hexadécimal. True par défaut
'renvoie une chaine multiligne
Private Function ViewAsHexa(buff() As Byte, Optional ByVal dwDigitPerRow As Long = 16, Optional ByVal bAscii As Boolean = True) As String
'valeur de retour
Dim strHexa As String
'compteurs
Dim i As Long, j As Long
'nombre de colonnes restantes après les lignes entières
Dim iMod As Long
'nombre de lignes entières
Dim iDiv As Long
'taille des données à afficher
Dim cbBuff As Long
On Error GoTo Fin
cbBuff = UBound(buff) + 1
iDiv = cbBuff \ dwDigitPerRow
iMod = cbBuff Mod dwDigitPerRow
'pour chaque ligne entière
For i = 0 To iDiv - 1
'pour chaque colonne d'une ligne
For j = 0 To dwDigitPerRow - 1
'afficher en hexa sur deux caractères
strHexa = strHexa & Right$("00" & Hex$(buff(i * dwDigitPerRow + j)), 2) & " "
Next
'si affichage ASCII après l'hexa
If bAscii Then
'pour chaque octet de la ligne
For j = 0 To dwDigitPerRow - 1
Select Case buff(i * dwDigitPerRow + j)
'affiche les caractères imprimables
Case 32 To 126
strHexa = strHexa & Chr$(buff(i * dwDigitPerRow + j))
'sinon un point
Case Else
strHexa = strHexa & "."
End Select
Next
End If
'passe à la ligne suivante
strHexa = strHexa & vbCrLf
Next
'affiche la dernière ligne non complète
For i = iDiv * dwDigitPerRow To iDiv * dwDigitPerRow + iMod - 1
strHexa = strHexa & Right$("00" & Hex$(buff(i)), 2) & " "
Next
'complète la ligne pour aligner l'affichage ASCII avec les lignes supérieures
For i = 0 To 16 - iMod - 1
strHexa = strHexa & " "
Next
'affichage ASCII si nécessaire
If bAscii Then
'pour chaque caractère de la dernière ligne
For i = iDiv * dwDigitPerRow To iDiv * dwDigitPerRow + iMod - 1
Select Case buff(i)
'affiche les caractères imprimables
Case 32 To 126
strHexa = strHexa & Chr$(buff(i))
'sinon un point
Case Else
strHexa = strHexa & "."
End Select
Next
End If
ViewAsHexa = strHexa
Fin:
End Function