Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-11-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
Question IntToBytes y viceversa

Que tal gente, queria saber como poder pasar un Integer (4 bytes) a un arreglo de bytes, es decir, a groso modo en delphi tendria que ser hipoteticamente asi

Código Delphi [-]
type
  intBytes = Array[0..3] of Byte;
var
  X: Integer;
  B: intBytes;
begin
  X:= 500;
  B:= IntToBytes(X);
  X:= BytesToInt(B);  
end;

El ejemplo es para ilustrar mejor el problema, osea quiza tmb necesite, o no, algun flag para el signo u otras cosas. A lo que voy es que no necesariamente quiero que quede asi el codigo, la idea es la conversion.

Saludos
Responder Con Cita
  #2  
Antiguo 24-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Para pasar un entero a binario:
Código Delphi [-]
function IntToBin(Valor: Longint; Digitos: integer): string;
begin
  result:= StringOfChar('0', Digitos);
  while Valor > 0 do
  begin
    if Valor and 1 = 1 then
      Result[Digitos]:= '1';
    Dec(Digitos) ;
    Valor:= Valor shr 1;
  end;
end;
Luego podés recorrer la cadena resultante para asignar los valores a tu arreglo.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 24-11-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
Gracias ecfisa, pero no hay una manera mas rapida que separar el binario en grupos de 8 ?
Responder Con Cita
  #4  
Antiguo 24-11-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
Resuelto.. cada numero corresponde a 256^Posicion * Numero[Posicion]
Responder Con Cita
  #5  
Antiguo 24-11-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
function BytesToInt(Num: intBytes): Integer;
begin
Result:= 256^3 * Num[3] + 256^2 * Num[2] + 256 * Num[1] + Num[0];
end;

function IntToBytes( X: Integer ): intBytes;
begin
Result[0]:= X mod 256;
Result[1]:= X div 256;
Result[2]:= X div 256^2;
Result[3]:= X div 256^3;
end;
Responder Con Cita
  #6  
Antiguo 24-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola kdemia.

No entiendo muy bién tu última pregunta, pero si quisieras hacer algo mas "a medida" al código de tu primer consulta:
Código Delphi [-]
...
type
  TIntBytes = Array[0..3] of Byte;

procedure CargarArreglo(var V: TIntBytes; Num: Byte); // valor máximo de Num: 15
var
  i: Byte;
begin
  for i:= 3 downto 0 do
    V[i]:= (Num shr i) and 1;
end;
Que sería similar a llamar a IntToBin(n, 4). Te estarías ahorrando el pasaje al arreglo, eso sí...

Saludos.

Edito: Me llamaron mientras estaba editando y no ví tus 2 nuevos mensajes. Pero veo que ya encontraste otra solución, me alegra mucho
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 24-11-2011 a las 20:42:27.
Responder Con Cita
  #7  
Antiguo 24-11-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor:

Responder Con Cita
  #8  
Antiguo 27-11-2011
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Si entiendo bien la pregunta, se podría hacer algo como esto:

Código Delphi [-]
type TArreglo = array [1..SizeOf(Integer)] of Byte;

procedure Algo;
var Entero: Integer;
     Arreglo: ^TArreglo;
     Ind: Integer;
     A: String;
begin
  Entero:= 5;
  Arreglo:= @Entero;
  // Para mostrarlo no más.
  A:= '';
  for Ind:= 1 to SizeOf(Integer) do
    A:= A + '[' + IntToStr(Arreglo^[Ind]) + ']';
  ShowMessage(A);  
end;

Lo que hacemos es tener un puntero a un arreglo de x bytes (probablemente 4, pero nunca hay que fiarse de la longitud de un Integer, porque el tamaño puede variar), y una variable Integer propiamente dicha. Después asignamos al puntero la dirección de memoria del entero y listo.

Espero sirva. Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Conversión de Lat/Lng a UTM y viceversa sur-se Varios 7 25-11-2016 18:29:39
Cambiar TimetoStr y viceversa gcc32 Varios 20 21-11-2010 21:17:44
Convertir IP al nombre relacionado y viceversa arima Internet 16 16-08-2006 17:34:52
Pasar Delphi 5 a 6,7 y viceversa Ivanzinho Varios 2 29-11-2005 10:36:14
conversion de double a string y viceversa mainau Varios 2 03-08-2004 21:11:30


La franja horaria es GMT +2. Ahora son las 19:23:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi