Contributor: JOHN STEPHENSON { > Oh, btw Hunking is the conversion of three binary bytes to four ascii > bytes! Thought you should know that :) > Hmmm... so that's 3*8 bits=24 bits, into 4 ascii bytes=6 significant > bits, is 2^6, =64 different ascii characters needed. I think I can > manage that... Well.. not exactly.. I wrote the hunking routine, and your example isn't what I want, but it's close, I want to convert a binary string to an ascii string, what I have hear is what I'd like to have the opposite of, and possibly improvements on it. } {$A+,B-,D+,E+,F-,G-,I-,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+} {$M 16384,0,655360} uses crt,dos; Const xtranslate: array[#0..#63] of char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; Function Bin2Hunk(st: string): string; var temp: string; i,j,times: byte; begin temp := ''; { Figures out how many times the hunking loop with need to be run } { (it truncates to the nearest 4) } times := (length(st) div 4)*4; i := 0; if times <> 0 then repeat temp:=temp+char(byte(st[1+i]) shr 2); temp:=temp+char(((byte(st[1+i]) shl 4)+(byte(st[2+i]) shr 4)) and $3F); temp:=temp+char(((byte(st[2+i]) shl 2)+(byte(st[3+i]) shr 6)) and $3F); temp:=temp+char(byte(st[3+i]) and $3F); inc(i,4); until i = times; case length(st) mod 3 of {0:; -- do nothing if nothing is to be done! } 1: begin temp:=temp+char(byte(st[1+i]) shr 2); temp:=temp+char(((byte(st[1+i]) shl 4)) and $3F); end; 2: begin temp:=temp+char(byte(st[1+i]) shr 2); temp:=temp+char(((byte(st[1+i]) shl 4)+(byte(st[2+i]) shr 4)) and $3F); temp:=temp+char(((byte(st[2+i]) shl 2)) and $3F); end; end; { Map it } for j := 1 to length(temp) do temp[j] := xtranslate[temp[j]]; Bin2Hunk := temp; end; Function Search(subchar: char; searchstuff: array of char):byte; var i: word; begin search := 0; for i := 1 to sizeof(searchstuff) do if searchstuff[i] = subchar then search := i; end; Function Hunk2Bin(st: string): string; var j,i: byte; begin { Demap it } for j := 1 to length(st) do st[j] := char(search(st[j],xtranslate)); hunk2bin := st; end; var temp: string; begin clrscr; temp := 'Hello'; writeln('Unhunked: ',temp); temp := bin2hunk(temp); writeln('Hunked: ',temp); temp := hunk2bin(temp); writeln('Dehunked: ',temp); end. { Now if you can complete the Hunk2Bin that I started to write I'd be much obliged, I thought the Bin2Hunk was OK, but then I started trying to code the hunk2bin.. and.. ack! Note this routine uses the same radix coding as PGP without the CRC-16 :) }