01. juni 2004 - 22:37Der er
10 kommentarer og 1 løsning
Unix-string to windows-string(dos) og omvendt
Hej med jer. Jeg ville blive meget glad, hvis i kunne hjælpe mig. Problemet er følgende. Jeg er ved skriver et program i delphi(som ligge på en windows platform) som skal kommuniker med en unix maskine. Så er der vist nok noget med, at high og low bite, er byttet om i forhold til de to styresystemer. Er der nogen der kan sige mig, hvordan man konverter fra en unix-string til en windows-string og omvendt. Mvh Søren Jepsen
Mød en af Nordens fremmeste eksperter i adfærdsdesign – Morten Münster, der bl.a. har skrevet ” Jytte fra marketing er desværre gået for i dag” – på Computerworld Cloud & AI Festival.
// UNIXToWin -- Convert a UNIX single LF text stream to a Windows CRLF text stream function UNIXToWin(InStream: TStream; OutStream: TStream; Notify: TConvertNotify): Boolean; var B, NewB: Byte; Value: LongInt; begin if not Assigned(InStream) then begin Result := False; Exit; end; if not Assigned(OutStream) then begin Result := False; Exit; end; if Assigned(Notify) then Notify(nkMax,InStream.Size); Value := 0; while InStream.Position < InStream.Size do begin InStream.Read(B,SizeOf(Byte)); case B of $0A: begin NewB := $0D; OutStream.Write(NewB,SizeOf(Byte)); NewB := $0A; OutStream.Write(NewB,SizeOf(Byte)); end; else OutStream.Write(B,SizeOf(Byte)); end; Inc(Value); if Assigned(Notify) then Notify(nkProgress,Value); end; if Value = InStream.Size then begin if Assigned(Notify) then Notify(nkProgress,0); end; Result := True; end;
// WinToUNIX -- Convert a CRLF Windows text stream to single LF UNIX text stream function WinToUNIX(InStream: TStream; OutStream: TStream; Notify: TConvertNotify): Boolean; var B: Byte; Value: LongInt; begin if not Assigned(InStream) then begin Result := False; Exit; end; if not Assigned(OutStream) then begin Result := False; Exit; end; if Assigned(Notify) then Notify(nkMax,InStream.Size); Value := 0; while InStream.Position < InStream.Size do begin InStream.Read(B,SizeOf(Byte)); if B <> $0A then begin OutStream.Write(B,SizeOf(Byte)); end; Inc(Value); if Assigned(Notify) then Notify(nkProgress,Value); end; OutStream.Seek(SizeOf(Byte),soFromEnd); OutStream.Read(B,SizeOf(B)); if B <> $0D then begin B := $0D; OutStream.Write(B,SizeOf(Byte)); end; if Value = InStream.Size then begin if Assigned(Notify) then Notify(nkProgress,0); end; Result := True; end;
Problemet er, at jeg skal kommuniker med et program, der ligger på en unix-maskine. Og det skal foregå over en tcp/ip socket. Og jeg er ret sikker på at man skal vende bitene, så f.eks 10101011 kommer til at hede 11010101?
Der er ikke rigtigt nogen grund til at lave en OmbytByte funktion som kun kalder swap.
Swap opererer på smallint/word ikke på integer og denne sammenhæng tror jeg at det er vigtigt at holde styr på.
Og så føler jeg mig lidt snydt point mæssigt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.