Ayuda... Repetir funcion hasta el final del archivo

Iniciado por apexseal, 10 Agosto 2012, 10:32 AM

0 Miembros y 2 Visitantes están viendo este tema.

apexseal

Saludos a todos!

Tengo un programa que uso para leer un archivo .bin, lo convierto a binario y cambio bits de un lado a otro. Pero es necesario que el proceso se haga cada 16 bits, en total son 8 cambios de posicion.

Necesito hacer esto cada 16 bits hasta el final del archivo:

12 al 2
15 al 4
9 al 13
5 al 10
11al 8
3 al 7
1 al 14
16 al 6

La manera que lo estoy haciendolo me da el resultado pero me tomaria una eternidad hacerlo asi

Chunk = Text1.Text
Bit1 = 12
Bit2 = 16
bChar = Mid$(Chunk, Bit1, 1)
Mid$(Chunk, Bit1, 1) = Mid$(Chunk, Bit2, 1)
Mid$(Chunk, Bit2, 1) = bChar
Text2.Text = Chunk

En otras palabras estoy haciendo esto 8 veces cada 12 bits, me muero...

Hay alguna manera de automatizar los 8 cambios cada 16 bits hasta el final?

8 bit shift cada 16 bits independientemente...

Gracias por su tiempo amigos!


MCKSys Argentina

No te entendi bien: Estas intercambiando los bits de cada WORD (2 bytes) del archivo?

Esto seria para cifrar la data?
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


$Edu$

No entiendo bien que es lo que haces, ya que si andas con manejos de bits y eso tendrias que saber mi respuesta, pero la digo por si a caso:

Cuando lees un archivo lo haces con un bucle While Not (EOF) que significa Mientras no sea el End Of File (Final del archivo), asi cuando llegue al final del archivo saldra del bucle y hara lo que siga.
Pero dentro de ese bucle solo tendras que ir aumentando el valor de esas variables que usas.

BlackZeroX

#3
Cita de: apexseal en 10 Agosto 2012, 10:32 AM

Chunk = Text1.Text
Bit1 = 12
Bit2 = 16
bChar = Mid$(Chunk, Bit1, 1)
Mid$(Chunk, Bit1, 1) = Mid$(Chunk, Bit2, 1)
Mid$(Chunk, Bit2, 1) = bChar
Text2.Text = Chunk


Con mid$() NO vas a trabajar con bits de manera directa, necesitas usar las operaciones auxiliares de equivalencia... ya que o trabajas con bits o trabajas con bytes ambos son distintos... y me da la impresion que te refieres a bytes y no a bits...

usando el array de bytes puedes hacer un cambio de bytes muy simple como este (NO ES LO QUE PIDES O ESO CREO... ya que no se te entendió realmente la idea):

Código (vb) [Seleccionar]

'12 al 2
'15 al 4
'9 al 13
'5 al 10
'11al 8
'3 al 7
'1 al 14
'16 al 6
Const sFileName As String = "c:\alcaeda.txt"
Dim ff As Integer
Dim d As Long
Dim array_data() As Byte

   ff = FreeFile()
   Open sFileName For Binary Access Read As ff
       If (LOF(ff) > 0) Then
           ReDim array_data(0 To LOF(ff))
           Get ff, , array_data
           d = 0
           While (d < LOF(ff))
               bSwap array_data(12 + d), array_data(2 + d)
               bSwap array_data(15 + d), array_data(4 + d)
               bSwap array_data(9 + d), array_data(13 + d)
               bSwap array_data(5 + d), array_data(10 + d)
               bSwap array_data(11 + d), array_data(8 + d)
               bSwap array_data(3 + d), array_data(7 + d)
               bSwap array_data(1 + d), array_data(14 + d)
               bSwap array_data(16 + d), array_data(6 + d)
               d = (d + 8)
           Wend
       End If
   Close ff


La función bSwap() la encuentras aquí:
Recopilacion de Funciones con operaciones Binarias.

NOTA: Si vas a PROCESAR un archivo sin importarte que sea o no legible para un ser humano es mejor usar un array de bytes ya que mid$() es para strings y este ultimo tipo esta orientado para otros tipos de datos pero igual se puede ocuper pero en lo personal es menos recomendable...

Dulces Lunas!¡.
The Dark Shadow is my passion.

apexseal

Es que no se como expresrme al 100%... A ver si me explico... tengo un file cifrado, pero para decriptarlo necesito hacer esos 8 pasos cada 16 bits osea cada 2 bytes... Leo el fichero cpmpleto y lo voy proceando cada 16 bits... En fin, necesito un loop o algo parecido que lo haga...

apexseal

Cita de: MCKSys Argentina en 10 Agosto 2012, 21:18 PM
No te entendi bien: Estas intercambiando los bits de cada WORD (2 bytes) del archivo?

Esto seria para cifrar la data?

Si pero para descifrar...

BlackZeroX

.
Mira igual y necesita correcciones..

Código (Vb) [Seleccionar]


Dim array_data() As Integer ' Como trabaja con con Word (16 bit) uso Integer en lugar de byte (8 bit)
...

           While (d < LOF(ff))
               array_data(d) = bSwapBit(array_data(d), 12 - 1, 2 - 1)
               array_data(d) = bSwapBit(array_data(d), 15 - 1, 4 - 1)
               array_data(d) = bSwapBit(array_data(d), 9 - 1, 13 - 1)
               array_data(d) = bSwapBit(array_data(d), 5 - 1, 10 - 1)
               array_data(d) = bSwapBit(array_data(d), 11 - 1, 8 - 1)
               array_data(d) = bSwapBit(array_data(d), 3 - 1, 7 - 1)
               array_data(d) = bSwapBit(array_data(d), 1 - 1, 14 - 1)
               array_data(d) = bSwapBit(array_data(d), 16 - 1, 6 - 1)
               d = (d + 1)
           Wend

...



La función bSwapBit() la encuentras aquí:
Recopilacion de Funciones con operaciones Binarias.

Dulces Lunas!¡.
The Dark Shadow is my passion.

BlackZeroX

The Dark Shadow is my passion.

apexseal

Y tengo que trabajar con bits obligatoriamente, el convertir a binario no es problema, donde me estanque es en trabajar cada word individual hasta el final... Hace mucho mucho no trabajo con vb6 y estoy perdido en esa area.

apexseal

Ok voy a tratar, ya esto me da una idea mas clara...