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
Probiers mal so:
long l = 1445645634;
byte[] values = BitConverter.GetBytes(l);
string s = Encoding.ASCII.GetString(values);
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???
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.
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
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?
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
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
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.
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