[c#] hoe byte[] naar string?

Pagina: 1
Acties:

  • nhimf
  • Registratie: September 2000
  • Laatst online: 19-08 10:00

nhimf

Lekker belangrijk allemaal

Topicstarter
Ik heb het probleem dat ik niet weet hoe ik (op een normale manier) een array van bytes naar een string kan converteren.

Waarom wil ik dit? Nou, omdat ik bestanden in een database op wil slaan.
In dit geval in een blob veld in een mysql database.

het beste is(wat ik las op de mysql site) de data hexadecimaal erin stoppen.
Dus in de vorm 0x<data> bijv, 0x4041420d0a enz

Op dit moment ga ik alle bytes af en converteer ik deze naar een string en voeg deze toe aan de uiteindelijke string. Probleem hier is dat het ten eerste heel traag en omslachtig is, maar vooral dat hij bijv een enter (0D) vertaald als D, waardoor mijn data omzeep wordt geholpen.

Mijn vraag is dus, weet iemand hier een fatsoenlijke manier om een bestand in een blob field te krijgen.

Ps. ik gebruik dus c# en een klasse die de mysql afhandeling doet, op een vergelijkbare manier als normaal mssql wordt afgehandeld.

Ik stink niet, ik ruik gewoon anders


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
array van bytes naar een string converteren doe je als volgt:
code:
1
System.Text.Encoding.ASCII.GetString ( byte[] arr, int index, int count);


of
code:
1
System.Text.Encoding.UTF8.GetString (...)

https://fgheysels.github.io/


  • nhimf
  • Registratie: September 2000
  • Laatst online: 19-08 10:00

nhimf

Lekker belangrijk allemaal

Topicstarter
Ah, ga het gelijk uitproberen, van de help die bij studio .net zit wordt je ook niet vrolijker

Ik stink niet, ik ruik gewoon anders


  • nhimf
  • Registratie: September 2000
  • Laatst online: 19-08 10:00

nhimf

Lekker belangrijk allemaal

Topicstarter
hmmz, hij maakt er nu echt karakters van.

Hij moet dus van de bijv een karakter A niet een A in de string zetten maar 40 (de hexadecimale waarde)


PS. Hij moet ook binaire data kunnen inlezen, waar dus bytes als 00 voorkomen, wat normaal in een string niet kan. Hierdoor wil ik het dus omzetten naar een hexadecimaal getal. zodat ik het kan invoeren als 0x00, waardoor mysql het snapt en het goed invoerd.

[ Voor 48% gewijzigd door nhimf op 05-02-2003 21:29 ]

Ik stink niet, ik ruik gewoon anders


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Ik snap het niet hoor, in die byte array staan die waardes dan toch al in hex ?

Kan je die array dan gewoon niet toevoegen aan je databank ofzo in die vorm?

https://fgheysels.github.io/


  • nhimf
  • Registratie: September 2000
  • Laatst online: 19-08 10:00

nhimf

Lekker belangrijk allemaal

Topicstarter
whoami schreef op 05 February 2003 @ 21:29:
Ik snap het niet hoor, in die byte array staan die waardes dan toch al in hex ?

Kan je die array dan gewoon niet toevoegen aan je databank ofzo in die vorm?
Daar heb je gelijk in, maar als je data in een db wil stoppen moet je een query uitvoeren, en die zijn dus in de vorm van een string, en dus moet ik mijn byte array omzetten naar een string

Ik stink niet, ik ruik gewoon anders


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:28

Creepy

Tactical Espionage Splatterer

nhimf schreef op 05 februari 2003 @ 21:35:
[...]


Daar heb je gelijk in, maar als je data in een db wil stoppen moet je een query uitvoeren, en die zijn dus in de vorm van een string, en dus moet ik mijn byte array omzetten naar een string
Waarom zou je een string van ascii waarden in je DB willen zetten i.p.v. de echte string zelf?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
nhimf schreef op 05 February 2003 @ 21:35:
[...]


Daar heb je gelijk in, maar als je data in een db wil stoppen moet je een query uitvoeren, en die zijn dus in de vorm van een string, en dus moet ik mijn byte array omzetten naar een string


Euhm, nee hoor.
Als je een integer in je databank wilt zetten, ga je toch ook die int niet eerst naar een string omvormen.

Ik denk dat jij eens moet kijken naar 'parameters'.

code:
1
2
3
Command1.Commandtext = "INSERT INTO table (veld) VALUES (@p_Param1)";
Command1.Parameters.Add ("@p_Param1", OleDbType.Integer);
Command1.Parameters["@p_Param1"].Value = 1;

En dit geldt dus ook voor andere data-types.

https://fgheysels.github.io/


  • nhimf
  • Registratie: September 2000
  • Laatst online: 19-08 10:00

nhimf

Lekker belangrijk allemaal

Topicstarter
wat dus de bedoeling is,
Stel je heb een array met de waardes {0x44, 0x0d, 0x00, 0x9c}
dan wordt de query
insert into file values (0x440d009c);

Even als voorbeeld.
Waarom ik er een string van wil maken, is omdat ik zo geen andere manier weet om het in de db te stoppen dan een query.

Ik stink niet, ik ruik gewoon anders


  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 22-08 13:56
Onderstaand stukkie code zou de truck moeten doen:

code:
1
2
3
4
5
6
7
8
9
10
public static string GetAsHexaDecimal(byte[] bytes) 
{
 StringBuilder s = new StringBuilder();
 int length = bytes.Length;
 for (int n=0; n < length; n++) 
 {
  s.Append(String.Format("{0,2:x}", bytes[n]).Replace(" ", "0"));
 }
 return s.ToString();
}


Deze code geeft bijvoorbeeld:

a9993e364706816aba3e25717850c26c9cd0d89d

Hoop dat je hier mee wat kan :)

  • nhimf
  • Registratie: September 2000
  • Laatst online: 19-08 10:00

nhimf

Lekker belangrijk allemaal

Topicstarter
Oe het rokt!!!

Maare whoami, je had gelijk. Ik heb nooit daarnaar gekeken eigenlijk. En jah met integers deed ik altijd een conversie, maar dat was vooral door de gewoonte.

Maar het werkt nu, en ik ben zeer dankbaar voor de hulp

Ik stink niet, ik ruik gewoon anders


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
[nohtml]
nhimf schreef op 05 February 2003 @ 21:57:

Maare whoami, je had gelijk. Ik heb nooit daarnaar gekeken eigenlijk. En jah met integers deed ik altijd een conversie, maar dat was vooral door de gewoonte.
Da's niet zo slim. Echt veilig is het dan niet.

Stel, je hebt een inlogpagina, met een achterliggende SQL Server.
Als je op OK klikt oid, dan wordt volgende query uitgevoerd:
code:
1
select * from users where username  = 'user' and paswoord = 'baa'


Stel nu dat jij volgende code achter die ok knop hebt geschreven:
code:
1
2
3
string sqlStatement = "SELECT * FROM tblUser " +
                      "WHERE tblUser.Username = " + txtUserName.Text + 
                      "   AND tblUser.Pwd = " + txtPwd.Text;

En dat ik in txtUserName het volgende ingeef:
bestaandeusernaam'--
Dan hoef ik niet eens het paswoord van die bestaande usernaam te weten, en ik ben het systeem binnen.

https://fgheysels.github.io/


  • nhimf
  • Registratie: September 2000
  • Laatst online: 19-08 10:00

nhimf

Lekker belangrijk allemaal

Topicstarter
agha

Naja iig bedankt voor de tip, ik zal er voortaan aan denken.
Lost ook gelijk het aanhalingstekens probleem op ;)

Ik stink niet, ik ruik gewoon anders


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
nhimf schreef op 05 February 2003 @ 22:13:
agha

Naja iig bedankt voor de tip, ik zal er voortaan aan denken.
Lost ook gelijk het aanhalingstekens probleem op ;)


Idd, + dat het duidelijker is.

Misschien kan je je queries ook allemaal in stored procedures zetten ipv in 'plain text' in je code.
Dat maakt je code er leesbaarder op, en bij complexe queries zal het toch wel in performance schelen.

https://fgheysels.github.io/


  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 22-08 13:56
nhimf,

Waarom gebruik je eigenlijk mySQL?? Je kan gratis MSDE downloaden van Internet! Die biedt perfecte intergratie met de gratis ASP.NET editer van MS en met Visual Studio.NET!

MSDE biedt zo veel voordelen tegenover mySQL! Je kan met Stored procedures werken...relaties maken (leuk voor 14 februari ;)) en ik vind het over het algemeen gewoon beter dan mySQL (mijn menig, geen discussie graag)
nhimf schreef op 05 februari 2003 @ 20:59:
Ah, ga het gelijk uitproberen, van de help die bij studio .net zit wordt je ook niet vrolijker
Ik wordt juist supervrolijk van de documentatie van MS :D
Als je even doorhebt hoe het werkt, dan is het zo makkelijk!!

[ Voor 29% gewijzigd door PhoneTech op 06-02-2003 16:13 ]


  • nhimf
  • Registratie: September 2000
  • Laatst online: 19-08 10:00

nhimf

Lekker belangrijk allemaal

Topicstarter
PhoneTech, waarom ik mysql gebruik, is omdat ik met een db gebruik die ook via php bereikt moet worden. ;)

Ik stink niet, ik ruik gewoon anders


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
nhimf schreef op 06 February 2003 @ 16:18:
PhoneTech, waarom ik mysql gebruik, is omdat ik met een db gebruik die ook via php bereikt moet worden. ;)
En waarom zou je geen MSDE database via PHP kunnen bereiken? :)

https://fgheysels.github.io/

Pagina: 1