09. februar 2013 - 03:25Der er
6 kommentarer og 1 løsning
ASCII til Byte variabel
Hej,
Jeg er ved at lave et program som skal sende nogle kommando'er ud på en serielPort men jeg er kommet til et lille stop og jeg håber nogen her kan hjælpe mig ud af denne krise :)
Jeg har lavet en application der modtager et TcpStream fra enten et website og/eller det klient app jeg har lavet.
Jeg sender til server delen følgende f.eks. 1E:04:00:D2:00:01:93:9C, (som i dette tilfælde er den Hex/byte kode som skal sendes over serialPorten). Problemet er hvis jeg blot tager ovenstående (som er ASCII) og fjerner ":" og sender det på serialporten så får jeg jo denne text sendt som ascii og derfor ikke som byte/hex som jeg gerne vil.
Mit spørgsmål er derfor hvordan får jeg lavet en variabel(String) om fra ASCII til følgende en Byte og stadig bibeholder tegnene.
Det virker jo f.eks. hvis jeg hardkoder følgende: Dim Buffer() As Byte = {} Buffer = {&H1E, &H04, &H00, &HD2, &H00, &H01, &H93, &H9C} SerialPort.Write(Buffer, 0, 8)
Men jeg kan ikke få lov til blot at smide en string variabel ind istedet for 1E eller 04, osv. (f.eks. {&Harray(1)) det virker jo ikke. Nogen der har en god ide?
namespace E { public class Program { public static byte[] FromHex(string s) { byte[] ba = new byte[(s.Length+1)/3]; for(int i = 0; i < ba.Length; i++) { ba[i] = byte.Parse(s.Substring(3 * i, 2), NumberStyles.HexNumber); } return ba; } public static void Main(string[] args) { string s = "1E:04:00:D2:00:01:93:9C"; byte[] ba = FromHex(s); foreach(byte b1 in ba) { Console.WriteLine(b1); } Console.ReadKey(); } } }
Jeg bruger ikke VB.NET, men i VBScript ville jeg først bruge Split-funktionen til at dele strengen op i elementer, og dernæst konvertere hvert element fra hex med funktionen CInt:
dim buffer(7) a=split("1E:04:00:D2:00:01:93:9C",":") for i=0 to ubound(a) buffer(i)=cint("&H" & a(i)) next
Jeg tror jeg sammen med jer fik det løst: Følgende har jeg lavet og ser ud til at virke, jeg giver lige point senere til jer begge som tak for hjælpen. Nogengange for man stirret sig rigtig blind på nogle ting.
Dim EnvTcpReceived = "1E:00:00:00:00:00" Dim i As Integer Dim strHex As String = EnvTcpReceived Dim byteHex As Byte() = New Byte((strHex.Length + 1) \ 3 - 1) {}
For i = 0 To byteHex.Length - 1 byteHex(i) = Byte.Parse(strHex.Substring(3 * i, 2), Globalization.NumberStyles.HexNumber) Next
Som en sidegevindst er det så muligt at få en hurtig forklaring på strHex.Length + 1 \ 3 -1 halløj bare lige så jeg forstår det bedre. mange tak.
Da arne og roger ikke fik svaret så svarer jeg selv for at lukke den. Men tak til jer begge. Nu er indlægget ved at være lidt gammelt :)
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.