Avatar billede pablopablo Nybegynder
16. februar 2005 - 17:24 Der er 12 kommentarer og
1 løsning

String til byte array

Hejsa...

Hvordan laver jeg en lang string om til et byte array...?

Jeg har forsøg følgende, men det genererer en "arithmetic operation resulted in an overflow..." det har jo ikke rigtig noget at gøre med den måde jeg konvertere tegnene på, men min struktur ik...? Kan bare ikke se hvorfor det fejler?

Nogle forslag...?

Mvh. PabloPablo
Avatar billede pablopablo Nybegynder
16. februar 2005 - 17:30 #1
har lige prøvet med : ASCIIEncoding ascii = new ASCIIEncoding();
              ... = ascii.GetBytes(ASCIIEksportStreng);

Men det er som om, at alle div. tegn ikke bliver tolket korrekt? kan det passe?
Avatar billede arne_v Ekspert
16. februar 2005 - 17:38 #2
string s = "...";
byte[] b = Encoding.UTF8.GetBytes(s);

eller

string s = "...";
byte[] b = Encoding.Default.GetBytes(s);

alt efter om du vil have dine bytes som UTF-8 eller ISO-8859-1
Avatar billede pablopablo Nybegynder
16. februar 2005 - 18:02 #3
har lige afprøvet dine forslag....og ja, de konverterer stringen, ligesom min egen "ascii.GetBytes(ASCIIEksportStreng);" gør det...men har lige fundet ud af...at det er ikke det som er problemet...nu har jeg siddet og debugget...og de 6 sidste tegn i stringen kommer ikke med, de tilføjes i stedet for den næste som som sendes over com-porten, når gang man vælger at eksportere noget data...hmm...skummelt ik...?
Avatar billede arne_v Ekspert
16. februar 2005 - 18:28 #4
UTF8 og Default kan bare håndtere ÆØÅ - det kan ASCII ikke !
Avatar billede arne_v Ekspert
16. februar 2005 - 18:30 #5
Det er vel ganske normalt af man i den ene ende sender:

aaaa
bbbb

og at det i den anden ende læses som:

aa
aabb
bb
Avatar billede pablopablo Nybegynder
16. februar 2005 - 18:51 #6
hhmm...men der er jo noget galt i...at de 6 sidste tegn ikke bliver sendt med over mediet...?

Næste gang jeg så vælger at sende noget data, ja så er de 6 først tegn fra den forrige gang hvor data blev sendt...ja, det virker lidt som om, at bufferen ikke bliver korrekt tømt...det virker bare lidt underligt synes jeg...

Tidligere benyttede jeg P/Invoke direkte til at komm. med com-porten...det gør jeg sådan set stadig dog igennem dette  nu : http://www.opennetcf.org/library/ >> Serial >> Port >> Output....(The Port's output buffer. Set this property to send data. )
Avatar billede arne_v Ekspert
16. februar 2005 - 19:39 #7
Det er ikke et buffer problem - det er et helt normalt comm problem.

write aaaa
write bbbb

sende følgende bytes ud i ledningen:

a a a a b b b b

der er ikke nogen markering af hvor der er skel

read returnerer nogle data som de når frem f.eks.

aa
aabb
bb

hvis du vil ave mulighed for at X write => Y read, så er du nødt til at
separere data f.eks. med linieskift \r\n.
Avatar billede pablopablo Nybegynder
16. februar 2005 - 19:50 #8
hey...problemet er, at de 6 sidste tegn IKKE bliver modtaget! der i forvejen et hav af \r...det program jeg modtager data med modtager ikke de 6 sidste tegn...?

Da jeg benyttede dette før :  http://msdn.microsoft.com/msdnmag/issues/02/10/netserialcomm/ kunne jeg fint sende data uden problemer...grunden til at gik væk væk det var pga. tråd probelmer...

Så det er da uderligt ik...?
Avatar billede arne_v Ekspert
16. februar 2005 - 20:32 #9
Jeg læste "Næste gang jeg så vælger at sende noget data, ja så er de 6 først tegn fra den forrige gang hvor data blev sendt."
som om at de 6 manglende tegn dukkede op først i næste læsning.
Avatar billede pablopablo Nybegynder
16. februar 2005 - 20:53 #10
ja, det er korrekt...men det er jo også mig som har skrevet det, noget andet er det jo at forstå helt hvad der menes...:)

Men....fx. hvis jeg sender aaaabbbbccccdddd så modtog jeg kun aaaabbbbcc og næste gang jeg sendte og modtog data så det således ud : ccddddaaaabbbbcc...jeg forstår det ikke rigtigt...jeg sender imellem 600 - 900 tegn...og det er 6 stk som driller hver gang...hmm...

Et andet sted i programmet, er der noget kode som er i stand til at teste forbindelsen imellem to com-porte, som jeg tester ved, at sende en bestemt string og så tjekke om det også er den jeg modtager...og der virker fint nok...? i det tilfælde er det program som jeg køre på en anden pc ikke indblandet, det kunne jo skyldes det andet program så----? jeg har dog aldrig nogensinde oplevet problemer med det program, det modtager altid fint...så, jeg er nok lige som du...lidt forvirret..hehe...

Nu har jeg lavet det om, således at det bruger microsoft version af P/Invoke lige det her sted hvor at det driller med at sende data...og det virker....:) kunden er ligeglad hvor man lag det kører igennem...bare møget virker....MEN jeg glæder mig godt nok til DOT NET 2.0 udkommer! goddamnit' jeg har haft meget bøvl med det comport halløj...

Hvis du har kodet com-port, hvad har du så brugt..?

tak for snakken og hjælpen, læg blot et svar :)
Avatar billede arne_v Ekspert
17. februar 2005 - 22:12 #11
Jeg har aldrig selv kodet mod COM porte.
Avatar billede arne_v Ekspert
17. februar 2005 - 22:12 #12
og et svar
Avatar billede pablopablo Nybegynder
17. februar 2005 - 23:20 #13
vær glad for det!! ;)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester