Autor
|
Tema: StrConv Alternative Function (Leído 11,541 veces)
|
Swellow
Desconectado
Mensajes: 77
|
Hola amigos! Does anyone could help me fixing this function? It works but fails with unicode chars.... Here it is: Public Function AltStrConv(Temp As Variant, Conversion As VbStrConv) As Variant Dim i As Long, lLen As Long, bvHack(0) As Byte, lHackDelta As Long Dim bArr() As Byte, sString As String lHackDelta = VarPtr(bvHack(0)) If Conversion = vbFromUnicode Then sString = Temp lLen = Len(sString) ReDim bArr(0 To lLen - 1) For i = 0 To lLen - 1 bvHack(VarPtr(bArr(0)) - lHackDelta + i) = bvHack(StrPtr(sString) - lHackDelta + (i * 2)) Next i AltStrConv = bArr ElseIf Conversion = vbUnicode Then bArr = Temp lLen = UBound(Temp) + 1 sString = Space$(lLen) For i = 0 To lLen - 1 bvHack(StrPtr(sString) - lHackDelta + (i * 2)) = bvHack(VarPtr(bArr(0)) - lHackDelta + i) Next i AltStrConv = sString End If End Function Thanks A lot!
|
|
« Última modificación: 7 Octubre 2012, 17:25 pm por Swellow »
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
aquí te la dejo como se me ocurrió. Private Function AltStrConv(Temp As Variant, Conversion As VbStrConv) As Variant Dim i As Long, lLen As Long Dim bArr() As Byte, sString As String If Conversion = vbFromUnicode Then sString = Temp lLen = Len(sString) - 1 ReDim bArr(lLen) For i = 0 To lLen bArr(i) = Asc(Mid(Temp, (i + 1), 1)) Next i AltStrConv = bArr ElseIf Conversion = vbUnicode Then bArr = Temp lLen = UBound(Temp) sString = Space$(lLen + 1) For i = 0 To lLen sString = sString & Chr(bArr(i)) Next i AltStrConv = sString End If End Function
saludos
|
|
|
En línea
|
|
|
|
Swellow
Desconectado
Mensajes: 77
|
aquí te la dejo como se me ocurrió. Private Function AltStrConv(Temp As Variant, Conversion As VbStrConv) As Variant Dim i As Long, lLen As Long Dim bArr() As Byte, sString As String If Conversion = vbFromUnicode Then sString = Temp lLen = Len(sString) - 1 ReDim bArr(lLen) For i = 0 To lLen bArr(i) = Asc(Mid(Temp, (i + 1), 1)) Next i AltStrConv = bArr ElseIf Conversion = vbUnicode Then bArr = Temp lLen = UBound(Temp) sString = Space$(lLen + 1) For i = 0 To lLen sString = sString & Chr(bArr(i)) Next i AltStrConv = sString End If End Function
saludos Yeah I know this one but it uses Asc/Mid/Space/Chr and this is not good, if anyone can mod it without using Mid at least. Thanks
|
|
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
maybe using copymemory. Tomorrow I'll try to make something.
|
|
|
En línea
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
I made a post in HH time ago where I put all the different methods I found... Ofc HH is down so I can't paste them here... Anyway I throw some ideas: MultiByteToWideChar() and __vbaStrToUnicode()...
@Danyfirex: Working with memory is the same as using the "bvHack()" thingy.
|
|
|
En línea
|
|
|
|
Swellow
Desconectado
Mensajes: 77
|
I made a post in HH time ago where I put all the different methods I found... Ofc HH is down so I can't paste them here... Anyway I throw some ideas: MultiByteToWideChar() and __vbaStrToUnicode()...
@Danyfirex: Working with memory is the same as using the "bvHack()" thingy.
It's no problem if it use memory (bvHack) but do not use APIs..
|
|
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
I made a post in HH time ago where I put all the different methods I found... Ofc HH is down so I can't paste them here... Anyway I throw some ideas: MultiByteToWideChar() and __vbaStrToUnicode()...
@Danyfirex: Working with memory is the same as using the "bvHack()" thingy.
si ya veo, es que no recordaba ese tema. voy a mirar con bvHack().
|
|
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
well before reading about Karcrack says , I notice that is necesary to remove array bounds checks and try out of Visual Basic IDE, it means Compiled, And work Correctly. try it.
|
|
|
En línea
|
|
|
|
Swellow
Desconectado
Mensajes: 77
|
well before reading about Karcrack says , I notice that is necesary to remove array bounds checks and try out of Visual Basic IDE, it means Compiled, And work Correctly. try it. Yes I already checked that but It's not the problem, the function works but fails with unicode chars, try using it on this function and then try encrypting a string you will realize that it does not work... Function ROTXDecrypt(ByVal strData As String, ByVal strKey As String) On Error Resume Next Dim bData() As Byte, bKey() As Byte bData = AltStrConv(strData, vbFromUnicode) bKey = AltStrConv(strKey, vbFromUnicode) For i = 0 To UBound(bData) If i <= UBound(bKey) Then bData(i) = bData(i) - bKey(i) Else bData(i) = bData(i) - bKey(i Mod UBound(bKey)) End If Next i ROTXDecrypt = AltStrConv(bData, vbUnicode) End Function
Function ROTXEncrypt(ByVal strData As String, ByVal strKey As String) On Error Resume Next Dim bData() As Byte Dim bKey() As Byte bData = StrConv(strData, vbFromUnicode) bKey = StrConv(strKey, vbFromUnicode) For i = 0 To UBound(bData) If i <= UBound(bKey) Then bData(i) = bData(i) + bKey(i) Else bData(i) = bData(i) + bKey(i Mod UBound(bKey)) End If Next i ROTXEncrypt = StrConv(bData, vbUnicode) End Function
|
|
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
Maybe you're trying before compiling. because If you're running into vb IDE doesn't work. but if you compile work correctly. at least for me work correclty.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
GetProcAddress alternative function
Programación Visual Basic
|
cobein
|
2
|
3,174
|
9 Octubre 2008, 00:24 am
por cobein
|
|
|
StrPtr Alternative
Programación Visual Basic
|
Swellow
|
4
|
3,111
|
11 Junio 2012, 14:30 pm
por Swellow
|
|
|
[HELP] Invoke or Alternative to InternetReadFile API
Programación Visual Basic
|
Swellow
|
2
|
2,124
|
22 Junio 2012, 04:31 am
por Swellow
|
|
|
Alternative Replace & Right Functions
Programación Visual Basic
|
Swellow
|
6
|
2,913
|
9 Noviembre 2012, 20:46 pm
por Swellow
|
|
|
Duda sobre strconv y conversiones byte-caracter
Programación Visual Basic
|
OfTheVara
|
2
|
1,718
|
8 Julio 2015, 13:11 pm
por OfTheVara
|
|