Les Snippets

Connexion

Structure vers tableau de byte

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 15/01/2009 10:33:08 et initié par Charles Racaud [Liste]
Date de mise à jour : 15/01/2009 12:36:05
Vue : 5098
Catégorie(s) : Divers
Langages dispo pour ce code :
- VB 2005, VB 2008
- C# 2.x, C# 3.x
- VB6, VBA
- Delphi 5
- Delphi 5



Langage : VB 2005 , VB 2008
Date ajout : 15/01/2009
Posté par Charles Racaud [Liste]

'Imports System
'Imports System.Runtime.InteropServices
Private Function StructToByteArray(ByVal Struct As ObjectAs Byte()
  Dim StructSize As Integer = Marshal.SizeOf(Struct)
  Dim StructPrt As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(Struct))
  Dim StructBytes() As Byte = CType(Array.CreateInstance(GetType(Byte), StructSize), Byte())
  Marshal.StructureToPtr(Struct, StructPrt, False)
  Marshal.Copy(StructPrt, StructBytes, 0, StructSize)
  Marshal.FreeHGlobal(StructPrt)
  Return StructBytes
End Function

Langage : C# 2.x , C# 3.x
Date ajout : 15/01/2009
Posté par Charles Racaud [Liste]
//using System;
//using System.Runtime.InteropServices;
private static byte[] StructToByteArray(object Struct) {
  int StructSize = Marshal.SizeOf(Struct);
  IntPtr StructPrt = Marshal.AllocHGlobal(Marshal.SizeOf(Struct));
  byte[] StructBytes = new byte[StructSize];
  Marshal.StructureToPtr(Struct, StructPrt, false);
  Marshal.Copy(StructPrt, StructBytes, 0, StructSize);
  Marshal.FreeHGlobal(StructPrt);
  return StructBytes;
}
Langage : VB6 , VBA
Date ajout : 15/01/2009
Posté par PCPT [Liste]
DateMAJ : 15/01/2009
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As AnyByVal ByteLen As Long)
'
Function StructToByteArray(ByRef Struct As TYPE_A_SPECIFIER) As Byte()
    Dim abRet() As Byte
    Dim iLen    As Integer
    
    iLen = Len(Struct)
    ReDim abRet(To iLen - 1)
    
    Call CopyMemory (abRet(0), ByVal Struct,  iLen)
    StructToByteArray = abRet
    Erase abRet
End Function

Langage : Delphi 5
Date ajout : 02/07/2009
Posté par Bacterius [Liste]

type
 TByteArray = array of Byte;


function StructToByteArray(const Struct; const Size: Longword): TByteArray;
begin
 if Size > 0 then { On refuse une taille de structure nulle }
  begin
   { On définit la taille du tableau de bytes }
   SetLength(Result, Size);
   { On déplace la structure dans le tableau }
   Move(Struct, Result[0], Size);
  end;
end;

Remarque :
On peut remplacer : Move(Struct, Result[0], Size)
par : CopyMemory(@Result[0], @Struct, Size);
Langage : Delphi 5
Date ajout : 18/07/2009
Posté par f0xi [Liste]
{ Seulement pour Delphi > 2007 }
type
  TBytes = array of byte;
  PMyRecord = ^TMyRecord;
  TMyRecord = record
    A, B : LongWord;
    C, D : boolean;
    class operator Implicit(a: TMyRecord): TBytes;
    class operator Implicit(a: TBytes): TMyRecord;
  end;
const
  SizeOfMyRecord = SizeOf(TMyRecord);

class operator TMyRecord.Implicit(a: TMyRecord): TBytes;
begin
  SetLength(result, SizeOfMyRecord);
  Move(a, result, SizeOfMyRecord);
end;
class operator TMyRecord.Implicit(a: TBytes): TMyRecord;
var L : integer;
begin
  L := Length(a);
  if L > SizeOfMyRecord then
    L := SizeOfMyRecord;
  Move(a, result, L);
end;

Snippets en rapport avec : Tableau, Bytes, Structure, Struct



Codes sources en rapport avec : Tableau, Bytes, Structure, Struct

{Visual Basic, VB6, VB.NET, VB 2005} COMPRESSION
Fonction pour comprimer un tableau de byte...

{ASP / ASP.NET} AFICHAGE HTML/ASP D'UNE STRUCTURE DE TABLE
Il s'agit d'un petit utilitaire qui permet de voir directement via une page asp la structure d'une t...

{Visual Basic, VB6, VB.NET, VB 2005} TRI PAR INSERTION
Les listes triées sont très pratiques pour des quantités de données limitées : une liste semble pouv...

{C / C++ / C++.NET} ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROISSANT.
Bonjour, Le code source que je vais présenter est simple mais on y pense pas tout le temps. Il cla...

{Visual Basic, VB6, VB.NET, VB 2005} SÉRIALISTION - DÉSERIALISATION DE TABLEAUX ET COLLECTIONS
Après la source pour la sérialisation - désérialisation d'une LameGrid (que j'ai amélioré d'ailleurs...

{Delphi} UTILISER LES COMPOSANTS PAR LEURS NUMÉROS
Le principe : 1. Parcourir tous les composants d'une forme. 2. Y choisir le composant voulu et l'i...

{Javascript / DHTML} MOOTABLEAU
Une classe mooTools qui transforme une balise table en un ensemble div/tables qui permet de visualis...

{Visual Basic, VB6, VB.NET, VB 2005} JEU DE PENDU (COUIC 1 DE +)
Lundi, 01 Février 2010 04:58 un petit jeu de pendu réalisé sous vb 2008 express But du jeu : ...

{PHP} EXÉCUTER DES REQUETE STYLE SQL SUR UN ARRAY
La classe myArray, pour l'instant en version "j'ai codé comme un cochon" permet l'exécution de requê...

{C# / C#.NET} REMPLACER UNE SÉQUENCE DE BYTE
Cette méthode sert à remplacer simultanément dans une séquence byte[] A toutes les sous-séquences by...