Título: strings binarios ¿como?
Publicado por: SERBice en 28 Noviembre 2007, 00:13 am
si tengo el numero 1562036412 y lo quiero enviar por winsock, pero que no me ocupe los 10 digitos como si fuera un string y queiro mandarlo como si fuera binario, es decir un long en un string de modo que me envie 4 bytes (lo que seria algo como "¼È]" ó chr$(188) & chr$(200) & chr$(26) & chr$(93) segun mis calculos) ¿¿¿ como puedo hacerlo???
de momento lo hago usando arcivos binarios, escribo un archvo (una variable long en un archivo), la leo como string y la mando (y asi me ocupa solo 4 bytes) y en el otro lado del winsock hago la inversa, pero presumo qe a gran escala puede traer una baja en el rendimiento ademas deno ser e metodo correcto. asi pues, queda planteada la inquietud, espero que alguen sepa la respuesta.
Título: Re: strings binarios ¿como?
Publicado por: cobein en 28 Noviembre 2007, 02:10 am
Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) Private Sub Form_Load() Dim b(3) As Byte Dim lNum As Long lNum = 1562036412 CopyMemory b(0), lNum, &H4 Dim i As Long For i = 0 To 3: Debug.Print b(i);: Next End Sub
Título: Re: strings binarios ¿como?
Publicado por: SERBice en 28 Noviembre 2007, 02:57 am
muchas gracias por responder....
sere curioso ¿y para hacer el proceso opuesto?, es decir, para pasar del string formado por los valores byte a long (de ¼È] a 1562036412 por ejemplo.).
nuevamente muchas gracias.
Título: Re: strings binarios ¿como?
Publicado por: cobein en 28 Noviembre 2007, 02:59 am
Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) Private Sub Form_Load() Dim b(3) As Byte Dim lNum As Long lNum = 1562036412 CopyMemory b(0), lNum, &H4 Dim i As Long For i = 0 To 3: Debug.Print b(i);: Next lNum = 0 CopyMemory lNum, b(0), &H4 Debug.Print lNum End Sub
Título: Re: strings binarios ¿como?
Publicado por: SERBice en 28 Noviembre 2007, 03:09 am
nuevamente gracias, he hecho estas dos funciones muy basicas (y sin cntrol de errores, luego se lo hare dado que si los parametros que se le pasan, en especial a FromBinary son nulos o strings vacios daran error). Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) Function ToBinary(lnum As Long) As String Dim b(3) As Byte Dim i As Long Dim strmsg As String CopyMemory b(0), lnum, &H4 For i = 0 To 3 strmsg = strmsg & Chr$(b(i)) Next ToBinary = strmsg End Function Function FromBinary(strmsg As String) As Long Dim c() As Byte Dim lnum As Long Dim i As Long For i = 1 To Len(strmsg) ReDim Preserve c(i - 1) c(i - 1) = Asc(Mid$(strmsg, i, 1)) Next CopyMemory lnum, c(0), Val("&H" & UBound(c) + 1) FromBinary = lnum End Function Private Sub Form_Load() MsgBox ToBinary(96412234) MsgBox FromBinary(ToBinary(96412234)) End Sub
edit: quisiera escuchar sugerencias y opiniones.
Título: Re: strings binarios ¿como?
Publicado por: cobein en 28 Noviembre 2007, 06:29 am
Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) Function ToBinary(lnum As Long) As String Dim b(3) As Byte CopyMemory b(0), lnum, &H4 ToBinary = StrConv(b, vbUnicode) End Function Function FromBinary(strmsg As String) As Long Dim b() As Byte b = StrConv(strmsg, vbFromUnicode) CopyMemory FromBinary, b(0), &H4 End Function Private Sub Form_Load() Debug.Print FromBinary(ToBinary(96412234)) End Sub
|