H_U_N_T_E_R: Array[Byte] mi vrací metoda .GetData() na tom stream objektu, kterej potřebuju upravit. Dělám to pomocí OpenMCDF knihovny na OLE strukturovanym storage v binárnim souboru (proprietárnim).
SHIGORBIRDMAN: No, mě jde spíš o to, že tak, jak to dělám, mám pocit, že neni úplně košer. :) Můj postup:
1) načtu soubor
2) vycucnu z něj ten stream objekt
3) ze stream objektu načtu všechny Byty v pořadí do Array[Byte] objektu
a teď ta moje prasárna:
4) pomocí Encoding.Unicode.GetString() překlopim celej Byte Array na unicode string
5) rozdělim si celej string na list objektů podle speciálního terminate charakteru theString.split("\x00")
6) vyměnim řetězce v poli, který potřebuju
7) složim zpětně string z toho pole s pomocnym terminate charakterem: "\x00".join(theList)
8) přeložim zpět na Byte Array: Encoding.Unicode.GetBytes(theString)
9) zapíšu do streamu
10) přepíšu stream v souboru, commitnu a uložim na disk.
Tomu překládání pomocí UTF-16 bych se chtěl vyhnout a řešit to na úrovni toho Byte Array, proto se ptám, jak iterovat Byte Array, když mám předem daný pravidla:
16 Bytů - vyhrazeno pro ID
4 Byty - délka následujícího stringu (UTF-16) (uložíme do proměnný DYLKA)
Len(DYLKA+1)*2 - počet následujících Bytů, který nesou textovou hodnotu (UTF-16)
4 Byty - délka násleudjícího stringu (UTF-16) (uložíme do proměnný DALSIDYLKA)
Len(DALSIDYLKA+1)*2 - počet následujících Bytů, který nesou textovou hodnotu (UTF-16)
(mimochodem, psaný je to v IronPythonu)