[C#] convert string value to byte value

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ReTechNL
  • Registratie: December 2008
  • Laatst online: 15-09 11:22
Ik ben op dit moment bezig met een tooltje voor het maken van WOL pakketjes. helaas loop ik tegen een probleem aan...

Ik heb een textbox met een MAC adres: txt_mac.Text = 20-DF-40-83-EF-98
Dit probeer ik om te zetten naar een byte array maar dit krijg ik met geen enkele mogelijkheid die ik kan bedenken voor elkaar..

code:
1
string[] StrMacArray = txt_mac.Text.Split('-');


code:
1
StrMacArray[] {20, DF, 40, 83, EF, 98};


De byte array die ik probeer te krijgen is dan als volgt:
code:
1
byte[] mac = new byte[] { 0x20, 0xDF, 0x40, 0x83, 0xEF, 0x98 };


Als ik dit static invul in de byte array werkt het perfect alleen het converteren van een string array naar een byte array is mij een stap te ver.
Weet iemand hoe ik dit voor elkaar kan krijgen?

[ Voor 3% gewijzigd door ReTechNL op 24-05-2012 20:21 ]


Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 17-09 13:56

beany

Meeheheheheh

code:
1
byte byteValue = Convert.ToByte("A", 16);


:?

Dit is per byte, hoe je dat met een array doet mag je zelf uitvinden.

[ Voor 35% gewijzigd door beany op 24-05-2012 20:31 ]

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Acties:
  • 0 Henk 'm!

  • ReTechNL
  • Registratie: December 2008
  • Laatst online: 15-09 11:22
beany schreef op donderdag 24 mei 2012 @ 20:30:
code:
1
byte byteValue = Convert.ToByte("A", 16);


:?

Dit is per byte, hoe je dat met een array doet mag je zelf uitvinden.
Lol? dat is eigenlijk best simpel...
Ja sorry had nog nooit met bytes gewerkt...
C#:
1
2
3
4
5
6
7
8
9
10
            string[] macArray = txt_mac.Text.Split('-');

            byte[] mac = new byte[] {
                Convert.ToByte(macArray[0], 16),
                Convert.ToByte(macArray[1], 16),
                Convert.ToByte(macArray[2], 16),
                Convert.ToByte(macArray[3], 16),
                Convert.ToByte(macArray[4], 16),
                Convert.ToByte(macArray[5], 16)
            };


Werkt absolute perfect :) :P
Afbeeldingslocatie: http://i.imgur.com/ZoHuSl.png

Acties:
  • 0 Henk 'm!

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 21:32
Of gebruik Byte.Parse()/Byte.TryParse(), wat je weer kleiner kan maken met wat LINQ naar:
C#:
1
var mac = txt_mac.Text.Split('-').Select(Byte.Parse).ToArray();

Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 17-09 13:56

beany

Meeheheheheh

FlowinG schreef op donderdag 24 mei 2012 @ 20:59:
Of gebruik Byte.Parse()/Byte.TryParse(), wat je weer kleiner kan maken met wat LINQ naar:
C#:
1
var mac = txt_mac.Text.Split('-').Select(Byte.Parse).ToArray();
Geen idee waarom niet, maar met Byte.Parse krijg ik jouw code niet aan de praat. Onderstaande werkt wel:

code:
1
2
string txt_mac = "20-DF-40-83-EF-98";
byte[] mac = txt_mac.Split('-').Select(x => Convert.ToByte(x, 16)).ToArray();

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Nu nog zorgen dat je een beetje defensief programmeert tegen de lolbroeken die ZQ-€%- .- invullen :P ;)

Dus enkel 0-9, A-F accepteren en controleren of je array wel uit 6 elementen bestaat voordat je doodleuk macArray[5] gaat gebruiken.

...of alles laten klappen op een exception en die elders (laten) vangen natuurlijk of, in een try/catch mikken en een zinnige exception throwen :P :+

[ Voor 60% gewijzigd door RobIII op 24-05-2012 21:16 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 21:32
beany schreef op donderdag 24 mei 2012 @ 21:06:
[...]

Geen idee waarom niet, maar met Byte.Parse krijg ik jouw code niet aan de praat. Onderstaande werkt wel:

code:
1
2
string txt_mac = "20-DF-40-83-EF-98";
byte[] mac = txt_mac.Split('-').Select(x => Convert.ToByte(x, 16)).ToArray();
Omdat ik een fout maakte 8)7 Wat je namelijk doet is een hexadecimale waarde omzetten naar een byte ipv decimaal naar byte.

Dit is wel goed:
C#:
1
 var mac = txt_mac.Text.Split('-').Select(x => Byte.Parse(x, NumberStyles.HexNumber)).ToArray();


@RobIII: met bovenstaande code klapt ie er vanzelf uit, hoef je alleen maar een try/catch te doen. (I Know, programmeer logica afvangen met try/catch is niet netjes, maar werkt wel :))

[ Voor 13% gewijzigd door FlowinG op 24-05-2012 21:14 ]


Acties:
  • 0 Henk 'm!

  • ReTechNL
  • Registratie: December 2008
  • Laatst online: 15-09 11:22
RobIII schreef op donderdag 24 mei 2012 @ 21:12:
Nu nog zorgen dat je een beetje defensief programmeert tegen de lolbroeken die ZQ-€%- .- invullen :P ;)

Dus enkel 0-9, A-F accepteren en controleren of je array wel uit 6 elementen bestaat voordat je doodleuk macArray\[5] gaat gebruiken.

...of alles laten klappen op een exception en die elders (laten) vangen natuurlijk of, in een try/catch mikken en een zinnige exception throwen :P :+
Ik maak altijd een kleine simpele opzet om een werkende basis te krijgen welke ik vervolgens implementeer en beveilig checks en alles in een try/catch

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 22:43
LINQ om een rijtje karakters te parsen :X

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 17-09 13:56

beany

Meeheheheheh

farlane schreef op vrijdag 25 mei 2012 @ 17:18:
LINQ om een rijtje karakters te parsen :X
Misschien dat je je kritiek wil uitbreiden met hoe het dan wel simpel, efficient en overzichtelijk kan :? Kom eens met een mooi voorbeeldje :)

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 22:43
beany schreef op vrijdag 25 mei 2012 @ 17:21:
Misschien dat je je kritiek wil uitbreiden met hoe het dan wel simpel, efficient en overzichtelijk kan :? Kom eens met een mooi voorbeeldje :)
Ik vind je eerste voorstel wel duidelijk eigenlijk, misschien dat ik 'em zelf eerst naar een unsigned long geparsed had en dat shiften om de byte waardes te krijgen maar dat is gepiel in de marge waarschijnlijk:

C#:
1
2
3
4
5
6
7
8
9
10
ulong m = Convert.ToUInt64( "20-DF-40-83-EF-98".Replace( "-","" ), 16 );
byte[] mac = new byte[]
{
    (byte)( m >> 40 ),
    (byte)( m >> 32 ),
    (byte)( m >> 24 ),
    (byte)( m >> 16 ),
    (byte)( m >> 8 ),
    (byte)( m >> 0 )
};

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • HMS
  • Registratie: Januari 2004
  • Laatst online: 21-08 23:06

HMS

StackOverflow zegt ongeveer hetzelfde:

http://stackoverflow.com/...erter-tostring-in-reverse

Acties:
  • 0 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
Jeetje, ik mag hopen dat je het niet echt zoals hierboven wil aanpakken, want dat gaat behoorlijk onleesbare code opleveren...

C#:
1
2
3
4
5
6
7
8
// Om tekst te versturen via een netwerkverbinding
string txt = "blaat";

// Gebruik BitConverter.GetBytes(txt.Length) als je ook de lengte van de string in bytes wil hebben
byte [] txtdata = Encoding.ASCII.GetBytes(txt);

// Om (ASCII) tekst te ontvangen via een netwerkverbinding
string txt = Encoding.ASCII.GetString(txtdata, begin_van_array, einde_van_array);


En als je ook getallen wil doorsturen / opvragen via een netwerk, vergeet dan svp niet om IPAddress.HostToNetworkOrder of IPAddress.NetworkToHostOrder te gebruiken op de originele waarden.

Dat zit wel Schnorr.


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Lees nu het topic nog even een keer goed door en wijzig dan je post, want je "oplossing" heeft geen relatie tot het probleem van de TS.

[ Voor 4% gewijzigd door Herko_ter_Horst op 30-05-2012 20:55 ]

"Any sufficiently advanced technology is indistinguishable from magic."

Pagina: 1