![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
Tenes razón, disculpas.
Código:
String file_hex(const String aFileName, const int StartingAt, const int Quantity)
{
TFileStream *fs = new TFileStream(aFileName, fmOpenRead);
unsigned char buff;
String str = "";
try {
fs->Seek(StartingAt, soFromBeginning);
for(int i = 0; i < Quantity; i++) {
fs->Read(&buff, 1);
str += IntToHex(buff, 2) + ' ';
}
}
__finally {
delete fs;
}
return str.SetLength(str.Length()-1);
}
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Text = file_hex("C:\\Windows\\notepad.exe", 95, 20);
}
Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 09-12-2013 a las 17:51:33. |
|
#2
|
||||
|
||||
|
Os propongo una función en Ansi C para convertir una cadena contenida en un buffer de tamaño conocido y no ASCIIZ (como el buffer obtenido de la lectura de un archivo de texto) en texto hexadecimal:
Código:
//---------------------------------------------------------------------------
// Convierte un buffer binario en una cadena de números hexadecimales
bool BinToStr(BYTE *Bin, DWORD BinSize, char* Str, DWORD *StrSize)
{
if(!Str){
*StrSize = 2*BinSize + 4; // '\0' y dos caracteres de mas para el final en "\r\n"
return false;
}
if(*StrSize < 2*BinSize + 4) return false;
for(int i=0; i<BinSize; i++){
*Str = (0x0F & *Bin>>4) + 48;
*(Str+1) = (0x0F & *Bin) + 48;
if(*Str > '9') *Str += 7;
if(*(Str+1) > '9') *(Str+1) += 7;
Bin++; Str+=2;
}
*Str++ = '\r'; *Str++ = '\n'; *Str = 0;
return true;
}
Si pasamos como argumento Str = NULL nos devuelve el tamaño del buffer necesario (2*BinSize + 4) Es una función que yo he usado para esos fines. Saludos. Última edición por escafandra fecha: 09-12-2013 a las 21:15:35. |
|
#3
|
|||
|
|||
|
Hexadecimal
Hola ecfisa y escafandra,
el código de ecfisa, me funciono correctamente pasandole como parámetro cualquier archivo, gracias. escafandra, tu código lo veo muy interesante, estoy analizando tu función ("bool BinToStr(BYTE *Bin, DWORD BinSize, char* Str, DWORD *StrSize)"), sinceramente no habia visto algunos códigos del Anci C que están en tu código....., bueno, una consulta estoy tratando de llamar tu función para leer un archivo como hexadecimal pero no logro a llamarla, encontre una forma de llamarla pero no me funciona: BINTOSTR(string, string_type) cuales serian sus parámetros? Saludos. |
|
#4
|
||||
|
||||
|
[code]bool BinToStr(BYTE *Bin, DWORD BinSize, char* Str, DWORD *StrSize) /CODE]
Bin: un puntero de tipo BYTE (char*) que apunta al buffer que contiene el binario a convertir a texto hexadecimal. BinSize: El tamaño del buffer anterior. Str: Un puntero tipo char* con un buffer que recibirá la salida del texto hexadecimal StrSize: un puntero tipo DWORD con el tamaño del buffer Str. Ejemplo Supongamos que lees un binario en un puntero BYTE *Data de tamaño Size: Código:
char *Str; // Puntero a un buffer que recibirá la cadena DWORD StrSize; // tamaño del buffer // Calculamos el tamaño de StrSize: BinToStr(Data, Size, 0, &StrSize); // reservamos memoria para Str Str = new char[StrSize); // Convertimos Data a hexadecimal BinToStr(Data, Size, Str, &StrSize); ... No olvidar liberar el buffer Str cuando no nos haga falta (delete [] Str) Saludos. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| solucion a Error Invalid blob handle in record buffer | memehua | Conexión con bases de datos | 2 | 26-09-2011 22:03:14 |
| Eliminar Buffer TCP | jlsc | Varios | 2 | 16-06-2010 22:13:00 |
| ERROR:ShLink.GetPath(Buffer, Sizeof(Buffer), Data, SLGP_UNCPRIORITY) | Mav | Varios | 2 | 26-05-2008 21:31:49 |
| Bitmap buffer | fitolanga | Gráficos | 4 | 21-04-2007 15:58:29 |
| Error Invalid blob handle in record buffer??? sin usar "Blobs to cache" | varuhs | Conexión con bases de datos | 4 | 22-01-2007 21:19:53 |
|