Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.
function y64($source)
{ $yahoo64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._";
// something with 16 bytes not hex
$inlen = 16;
$in=0;
// in este ce primim
for(; $inlen >=3; $inlen -=3)
{
$dest.=$yahoo64[ord($source[$in])>>2];
$dest.=$yahoo64[((ord($source[$in])<<4)&0x30) | (ord($source[$in+1])>>4)];
$dest.=$yahoo64[((ord($source[$in+1])<<2)&0x3C) | (ord($source[$in+2])>>6)];
$dest.=$yahoo64[ord($source[$in+2])&0x3F];
$in += 3;
}
if($inlen>0)
{
// enters here :)
$dest.=$yahoo64[ord($source[$in])>>2];
$fragment = ((ord($source[$in])<<4)&0x30);
if($inlen>1){$fragment |= (ord($source[$in+1])>>4); }
$dest.=$yahoo64[$fragment];
if($inlen<2)
{$dest.="-";}
else
{$dest.=$yahoo64[((ord($source[$in+1])<<2)&0x3c)]; }
$dest.="-";
}
return $dest;
}
or this routine...
function y64($source)
{ $yahoo64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._";
// something with 16 bytes not hex
$inlen = 16;
$in=0;
// in este ce primim
for(; $inlen >=3; $inlen -=3)
{
$dest.=$yahoo64[ord($source[$in])>>2];
$dest.=$yahoo64[((ord($source[$in])<<4)&0x30) | (ord($source[$in+1])>>4)];
$dest.=$yahoo64[((ord($source[$in+1])<<2)&0x3C) | (ord($source[$in+2])>>6)];
$dest.=$yahoo64[ord($source[$in+2])&0x3F];
$in += 3;
}
if($inlen>0)
{
// enters here :)
$dest.=$yahoo64[ord($source[$in])>>2];
$fragment = ((ord($source[$in])<<4)&0x30);
if($inlen>1){$fragment |= (ord($source[$in+1])>>4); }
$dest.=$yahoo64[$fragment];
if($inlen<2)
{$dest.="-";}
else
{$dest.=$yahoo64[((ord($source[$in+1])<<2)&0x3c)]; }
$dest.="-";
}
public static string to_y64(byte[] input) {
/* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */
const string base64digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._";
int inlen=input.Length;
char[] temp = new char[24];
int i=0,j=0;
for (;inlen >= 3;inlen -= 3) {
temp[i++] = base64digits[input[j] >> 2];
temp[i++] = base64digits[((input[j] << 4) & 0x30) | (input[j+1] >> 4)];
temp[i++] = base64digits[((input[j+1] << 2) & 0x3c) | (input[j+2] >> 6)];
temp[i++] = base64digits[input[j+2] & 0x3f];
j += 3;
}
if (inlen > 0) {
int fragment;
temp[i++] = base64digits[input[j] >> 2];
fragment = (input[j] << 4) & 0x30;
if (inlen > 1)
fragment |= input[j+1] >> 4;
temp[i++] = base64digits[fragment];
temp[i++] = (inlen < 2) ? '-' : base64digits[(input[j+1] << 2) & 0x3c];
temp[i++] = '-';
}
return GetString(temp);
}
static unsigned yahoobase64 (unsigned char *src, unsigned srclen, char *dst) {
static const char *enc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz0123456789._";
unsigned char *end = src + srclen;
char *pdst = dst;
unsigned x;
for ( ; src < end; pdst += 4)
if (end - src >= 3) {
x = (src [0] << 16) + (src [1] << 8) + src [2];
pdst [3] = enc [x & 0x3f]; x >>= 6;
pdst [2] = enc [x & 0x3f]; x >>= 6;
pdst [1] = enc [x & 0x3f]; x >>= 6;
pdst [0] = enc [x & 0x3f];
src += 3;
continue;
}
else if (end - src == 2) {
x = (src [0] << 16) + (src [1] << 8);
pdst [3] = '-'; x >>= 6;
pdst [2] = enc [x & 0x3f]; x >>= 6;
pdst [1] = enc [x & 0x3f]; x >>= 6;
pdst [0] = enc [x & 0x3f];
src += 2;
continue;
}
else if (end - src == 1) {
x = src [0] << 16;
pdst [3] = '-'; x >>= 6;
pdst [2] = '-'; x >>= 6;
pdst [1] = enc [x & 0x3f]; x >>= 6;
pdst [0] = enc [x & 0x3f];
src += 1;
continue;
}
*pdst = '\0';
return pdst - dst;
}
function YahooBase64(Source: PChar; SourceLen: DWORD): PChar;
const
Enc : PChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._';
var
pEnd : PChar;
pDst : PChar;
X : DWORD;
begin
pEnd := Source + SourceLen;
Result := AllocMem(24);
pDst := Result;
X := 0;
While Source < pEnd Do
begin
If (pEnd - Source) >= 3 Then
begin
X := (Byte(Source[0]) SHL 16) + (Byte(Source[1]) SHL 8) + Byte(Source[2]);
pDst[3] := Enc[X AND $3F];
X := X SHR 6;
pDst[2] := Enc[X AND $3F];
X := X SHR 6;
pDst[1] := Enc[X AND $3F];
X := X SHR 6;
pDst[0] := Enc[X AND $3F];
Inc(Source,3);
Continue;
end
Else If (pEnd - Source) = 2 Then
begin
X := (Byte(Source[0]) SHL 16) + (Byte(Source[1]) SHL 8);
pDst[3] := '-';
X := X SHR 6;
pDst[2] := Enc[X AND $3F];
X := X SHR 6;
pDst[1] := Enc[X AND $3F];
X := X SHR 6;
pDst[0] := Enc[X AND $3F];
Inc(Source,2);
Continue;
end
Else If (pEnd - Source) = 1 Then
begin
X := Byte(Source[0]) SHL 16;
pDst[3] := '-';
X := X SHR 6;
pDst[2] := '-';
X := X SHR 6;
pDst[1] := Enc[X AND $3F];
X := X SHR 6;
pDst[0] := Enc[X AND $3F];
Inc(Source);
Continue;
end;
Inc(pDst,4);
end;
pDst^ := #0;
Dec(Source,SourceLen);
end;
If you are experiencing a similar issue, please ask a related question
Title | # Comments | Views | Activity |
---|---|---|---|
Find and Replace Stream with 0s | 8 | 62 | |
Delphi inherited method | 6 | 68 | |
Tembedded WB animatid gifs not animated on some pcs | 2 | 80 | |
Firemonkey BASS_Init into a thread | 17 | 4 |
Join the community of 500,000 technology professionals and ask your questions.