Function fncBinToHex(strBin As String) As String Dim intI As Variant Dim lngTemp As Variant lngTemp = 0 For intI = 1 To Len(strBin) If Mid(strBin, intI, 1) = "1" Then lngTemp = lngTemp + 2 ^ (Len(strBin) - intI) Next intI fncBinToHex = Hex(lngTemp) End Function
Skrivefejl: Jeg skrev: "Har du overvejet hvad 2016^2 giver?" men mente "Har du overvejet hvad 2^2016 giver?"
Hvorom alting er - jeg tror du skal lede længe efter et program eller en lommeregner, der kan håndtere tal af den størrelsesorden!
Spørgsmålet er, om du egentlig vil udregne potenser af den størrelse, eller om der er en fejl i din formel - altså en matematisk fejl, ikke programmeringsmæssig fejl
Ført til martin_moth, ja jeg er fuldt ud klar over at det giver et meget stort tal.
Dette er den binær string som skal konverteres: 111010100000000010111111101011111110000000000000001110000000111100000010010100000001011111110100000001111100000000000000000100000000011100000000000000101111111010000000000011111000000010000000001000001010111000001000000101111101000000000000000111110000000111000000011101111111110000010101111111100000000000000000000011110000001110000000111111111111110000101011111111000000000000000000000001110000011110000001111111111111100001010111111111000010000000111000000011100010101110000010111111111111000010101111111110000100000001111000000111111111111100010111111111111110010101011111111110000000000011111000000111111111111000101111111111111100101010111111111100000100000111110000000111111111000000011111111111111001010101111111111100001000000111111000001111111111000010101111111111100010101011111111111100001100000111110000011111111111010000000111111111000101010111111111111000101000001111100000001111111110001010000011111110001010101111111111110001111000000101000000011111111111010101010111111100010101111111111111110111111000000000000000111111111111101010101011111000101010111010101111110111110000000000000101111111111111110101010111010001010100000000011111101111110000000000001011111111111111111010101010001010101010001010101111001111110001010001010111111111111111110101010110010101010101010101011111001111100010101010101111111110101011101010101110101010101010101010111111011111110101011101010111111100010101010101011101010101010101010101011111111011101010111110101011111010101000101010111110101010101010111110111111010001000101111101010111111101010101010101111101010101010111010101111111100011101010111110101011111010101010101011111110101010101010101011111111100101010101111101010101111101010101011111111101010101011111111111111111101010101011111110101011111110101010101011111111111111111111111111111111010101010101111111010101111111010101011111111111111111111111111111111111101010101011111111101010111111111111111111111111111111111111111111111111010101010101111111111111111111111111111111111111111111111111010101010101
Ovenstående er dit binære tal hexadecimalt. Som de andre skriver, kan VB slet ikke håndtere så store tal. Derfor er løsningen at konvertere streng, der repræsenterer det binære tal til en streng, der repræsenterer tallet hexadecimalt. Jeg ved ikke hvad du skal bruge det til, men så må du jo selv dele den streng du får ud op i mindre bidder, så du kan behandle dataene.
Du laver dit binære tal om til hexadecimal (på strengform) således (f.eks.) :
Function Bin2Hex(ByVal bin As String) As String Dim c, b As String Dim i As Integer Dim val As Integer
While Len(bin) > 4 c = vb.Right(bin, 4) ' kopier den binære repræsentation af ét hexadecimalt ciffer bin = vb.Left(bin, Len(bin) - 4) val = 0
For i = 0 To 3 b = vb.Right(c, 1) c = vb.Left(c, Len(c) - 1) If b = "1" Then val = val + 2 ^ i Next
If val > 10 Then val = val - 10 b = Chr(Asc("A") + val) Else b = CStr(val) End If
Bin2Hex = b + Bin2Hex
End While
val = 0 c = bin For i = 0 To Len(c) - 1 b = vb.Right(c, 1) c = vb.Left(c, Len(c) - 1) If b = "1" Then val = val + 2 ^ i Next If val > 10 Then val = val - 10 b = Chr(Asc("A") + val) Else b = CStr(val) End If
Funktionen ovenfor er i VB .NET syntaks. Hvis du skal bruge den i VB6 skal du rette "vb.Left" og "vb.Right" til hhv. "Left" og "Right". Hvis det skal bruges i VB .NET, skal du have en Imports vb = Microsoft.VisualBasic med på din form.
Ja, men er du sikker på at det er VÆRDIEN af det 2016-cifrede tal du skal oversætte til hex (som jo er en abnormt stor værdi)?
Skal du ikke i stedet for oversætte det fx. byte for byte eller word for word?
Hvad ved jeg, aner intet om billedbeskedder til SMS, men det lyder meget mystisk i mine ører at du skal bruge VÆRDIEN af et 2016-cifret tal, og ikke blot kan nøjes med at oversætte det fx. byte for byte (252 bytes à 1 ciffer) eller word for word (126 words à 2 cifre) - måske mest naturligt som word, da det hexidecimale talsystem baserer sig på 16...
På den måde bliver det 2016-cifrede binære "tal" oversat til et 252-cifret hexidecimalt "tal"
yup, men det jeg undrede mig over var hvorfor det ikke blev encoded til hex med det samme... for jeg går ud fra du har et eller andet tool til det, men jeg ved jo ikke hvor du egentlig har data fra, så neverming.
yup > Tjek vores posting-tider (09:16:14) - vi burde gå til en eller anden form for synkron-sport sammen - hvad siger du til synkronsvømning? Et sidespring - so sorry :o)
Jeg kan godt se din pointe, men umildbart har jeg fået af vide at jeg skal tage den fulde binær streng og oversætte til en HEX streng. Så derfor er det, det som jeg var ude efter.
Jeg har pt ikke hul igennem til den udbyder som jeg bruger, så jeg kan ikke sige om det virker eller ej, endnu.
mvh Ibrene
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.