Ich muss eine Anzahl von Unicode-Zeichenfolgen aus SOAP-Aufrufen und SQL Server-Aufrufen abrufen. Dann muss ich alles in ein Byte [] in UTF7 konvertieren, damit es über einen Socket an einen Server gesendet werden kann, der eine UTF7-Bytefolge erwartet. Da ich nach jeder Zeichenfolge Steuerbytes einfügen muss, kann ich die Zeichenfolgen nicht einfach verketten und einen Encoding-Aufruf verwenden. (vereinfachtes Codebeispiel):Konvertieren mehrerer Zeichenfolgen in ein Byte []
Encoding enc = Encoding.UTF7;
byte[] bytes = new byte[16384];
int idx = 0;
bytes[idx++] = 11; // Starting control code
// create an array of strings from different sources.
string[] strs = GetTheStrings();
foreach (string str in strs)
{
bytes[idx] = enc.GetBytes(str); // Error
idx += enc.GetByteCount(str);
bytes[idx++] = 13; // line ending CR
}
bytes[idx] = 28; // ending control code
return bytes;
Ich bekomme einen Fehler von VS sagen, dass enc.GetBytes (str); "Kann den Typ byte [] nicht explizit in das Byte & umwandeln, fügt etwas hinzu, das die Encoding-Klasse überschreiben muss. Warum behandelt VS Bytes [idx] anders als beispielsweise byte [] bytes2 - was String für String funktioniert?" Ich habe mich an C/++, Java und viele andere Sprachen gewöhnt, aber C# scheint mich immer aufzufangen.Ich möchte keinen unsicheren Codeblock verwenden, um dies mit Zeigern zu tun, was unendlich einfacher wäre, weil andere es nicht tun Ich weiß nicht, dass Pointer und das Speichermanagement es behalten müssen Da die Bytes [idx] sich auf ein einzelnes Byte beziehen und nicht auf das Array, das es erwartet, gibt es eine Art von Cast, mit der ich das umgehen kann? eine besser angepasste Methode zu verwenden?
Ich habe ein Dutzend Sites mit Beispielcode angeschaut, aber dieses Problem mit mehreren Strings wird nie angezeigt. Soll ich jede Zeichenfolge in ein separates Byte [] laden und dann bei der zusammenführen Ende?
Keine der erwähnten Sprachen behandeln Byte ('Bytes [idx]') als Array von Bytes ... Sie möchten möglicherweise nicht verwandte Informationen aus dem Post bearbeiten, um Diskussionen über diese Teile zu vermeiden. –