Laden...

long in einen String umwandeln

Erstellt von preli vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.242 Views
preli Themenstarter:in
343 Beiträge seit 2007
vor 15 Jahren
long in einen String umwandeln

Hallo!

Was ich möchte ist einen long (Int64) Datentyp in einen string umwandeln - ABER nicht mit .ToString()
Ich brauche nicht die Zahl als string für eine Ausgabe, sondern einen string, der genausoviele bytes belegt wie der long Datentyp (also 8 byte) und quasi einen bestimmten long-Wert repräsentiert.
Ich will also quasi einen long wie einen string ansprechen.

Kling jetzt etwas komisch, also wozu brauch ich das: ich hab eine Funktion, die einen string als Übergabeparameter entgegennimmt. Ich hab aber eine Zahl (long) die ich jetzt als string übergeben möchte. Wenn ich aber .ToString nehme ist nicht sichergestellt dass der string immer gleich lang ist (muss aber so sein)

Vielleicht kann man eine Zahl ja irgendwie in ein Char-Array umwandeln und das dann in einen string oder so... wäre jedenfalls recht froh für irgendwelche Ideen.

Lg
Preli

PS: es sollte natürlich so performant wie möglich sein

[- www.saftware.net -](http://www.saftware.net/)
2.760 Beiträge seit 2006
vor 15 Jahren

Probiers mal so:


         long l = 1445645634;
         byte[] values = BitConverter.GetBytes(l);
         string s = Encoding.ASCII.GetString(values);

preli Themenstarter:in
343 Beiträge seit 2007
vor 15 Jahren

Aja, danke der BitConverter. Konnte mich nicht mehr erinnern, aber ich wusste dass man irgendwie auf die einzelnen Bytes zugreifen kann.

Das Encoding.ASCII.GetString(values); werd ich mir schenken und stattdessen einfach values.ToString(); durchführen, da mir es mir ziemlich schnuppe ist ob ASCII oder nicht. Es muss ja nicht ausgegeben werden.

Lg
Preli

//edit: oder greift values.ToString(); auch auf ein Encoding-Schema zurück???

[- www.saftware.net -](http://www.saftware.net/)
2.760 Beiträge seit 2006
vor 15 Jahren

System.Byte[]

😉 Bei Encoding.ASCII musst du aufpassen wenn auf der anderen Seite eine C/C++ Anwendung oder ein StringBuilder warten da die bei "\0" chars des String als beendet ansehen.

preli Themenstarter:in
343 Beiträge seit 2007
vor 15 Jahren

Danke für die Warnung, aber auf der anderen Seite wartet weder eine C/C++ Applikation noch ein StringBuilder.
Hab gerade bemerkt, dass values.ToString(); mir nur "System.Char[]" liefert, also doch mit Encoding.

Lg
Preli

[- www.saftware.net -](http://www.saftware.net/)
T
5 Beiträge seit 2008
vor 15 Jahren

Ich will also quasi einen long wie einen string ansprechen.

Kling jetzt etwas komisch, also wozu brauch ich das: ich hab eine Funktion, die einen string als Übergabeparameter entgegennimmt. Ich hab aber eine Zahl (long) die ich jetzt als string übergeben möchte.

Hmm, wenn du einen Long übergeben willst, warum deklarierst du den Parameter dann nicht als Long?

preli Themenstarter:in
343 Beiträge seit 2007
vor 15 Jahren

Hmm, wenn du einen Long übergeben willst, warum deklarierst du den Parameter dann nicht als Long?

Ich benutze eine nicht von mir programmierte Bibliothek und die will einen string haben. Ich könnte das Ganze jetzt umprogrammieren, aber das wäre recht anstrengend, da ziemlich viel auf diesen string aufbaut.

Lg
Preli

[- www.saftware.net -](http://www.saftware.net/)
49.485 Beiträge seit 2005
vor 15 Jahren

Hallo preli, hallo jaensen,

nur so eine Überlegung: Durch die Verwendung eines 8-bit-Encodings (wobei Encoding.ASCII sogar nur 7 bit verwendet) wird aus einem 8 Byte langem Array ein 8 Zeichen langer String. Da C#-Strings intern immer 16bit-Unicode also zwei Bytes pro Zeichen verwenden, würden so aus 8 Bytes also 16 Bytes werden.

herbivore

2.760 Beiträge seit 2006
vor 15 Jahren

Da hast du natürlich recht. Ich glaube aber das die Lösung trotzdem für ihn passt da er ja auf der anderen Seite wieder .Net benutzt. Theoretisch hätte er dann aber auch ToString() und long.Parse() benutzen können.

preli Themenstarter:in
343 Beiträge seit 2007
vor 15 Jahren

Ja, herbivore hat recht ASCII bringt Probleme mit sich, da ich bei zwei unterschiedlichen long Werten auch immer zwei unterschiedliche strings haben möchte.

Jedoch habe ich dieses Problem auch mit jedem anderen Encoding wie z.B. UTF8 - auch wenn ich verschiedene long-Werte umwandel kommen ab und zu die selben strings raus, da nicht druckbare Zeichen scheinbar als gleich angesehen werden (vermute ich mal).

Jetzt lass ich mir die Zahl einfach Hexadeximal anzeigen, dann hat der string max. 16 Zeichen (zwar doppelt so viel wie der long Wert bytes hat, aber das ist verkraftbar)

Lg
Preli

[- www.saftware.net -](http://www.saftware.net/)