iOS用のascii85/base85エンコーダ/デコーダはありますか?
誰かがascii85エンコーダ/デコーダの実装を持っているか、ライブラリを知っていますか?base64 encoding and decodingはもはや問題ではありませんようだが...
ありがとうございました。
PS:BASE85が使用されます。 in RFC1924
iOS用のascii85/base85エンコーダ/デコーダはありますか?
誰かがascii85エンコーダ/デコーダの実装を持っているか、ライブラリを知っていますか?base64 encoding and decodingはもはや問題ではありませんようだが...
ありがとうございました。
PS:BASE85が使用されます。 in RFC1924
自分で何かが必要なので、書きました。 Here's an Objective C implementation。それは、アドビバージョンではなくRFC 1924文字セットを使用することに注意してください。助けてくれたら教えてください!
あなたがこれを確認しましたか? MITライセンスのコード200行:http://www.remyoukaour.com/projects/ascii85/ ココアの文字列やファイルなどを使用するには大きな作業ではありません。
私が自分で行った目的の移植です。できます。ここで
static unsigned long pow85[] = {
85*85*85*85, 85*85*85, 85*85, 85, 1
};
void wput(unsigned char* output, unsigned long tuple, int bytes) {
for(int i=0; i<bytes; i++)
output[i] = (tuple>>((3-i)*8)) & 0xFF;
}
int decode85(const char* input, unsigned char *output) {
unsigned long tuple = 0;
int c, count = 0, posInput = 0, posOutput = 0;
for (;;)
switch (c = input[posInput++]) {
default:
if (c < '!' || c > 'u') {
NSLog(@"bad character in ascii85 region: %#o", c);
return -1;
}
tuple += (c - '!') * pow85[count++];
if (count == 5) {
wput(output+posOutput, tuple, 4);
posOutput += 4;
count = 0;
tuple = 0;
}
break;
case 'z':
if (count != 0) {
NSLog(@"z inside ascii85 5-tuple");
return -1;
}
output[posOutput++] = '\0';
output[posOutput++] = '\0';
output[posOutput++] = '\0';
output[posOutput++] = '\0';
break;
case '~':
if ((input[posInput] == '>')||(input[posInput] == '\0')) {
posInput++;
if (count > 0) {
count--;
tuple += pow85[count];
wput(output+posOutput, tuple, count);
posOutput += count;
}
c = input[posInput++];
return posOutput;
}
NSLog(@"~ without > in ascii85 section");
return -1;
case '\n': case '\r': case '\t': case ' ':
case '\0': case '\f': case '\b': case 0177:
break;
case EOF:
NSLog(@"EOF inside ascii85 section");
return -1;
}
}
は、あなたのクラスに含めるのObjective-Cのラッパーです:答えを
+(NSData*)decodeAscii85:(NSString*) sEncoded
{
char* sBuffer = (char*)malloc(sEncoded.length+1);
if(![sEncoded getCString:sBuffer maxLength:(sEncoded.length+1) encoding:NSASCIIStringEncoding])
{
free(sBuffer);
return nil;
}
unsigned char* sOutBuffer = (unsigned char*)malloc(sEncoded.length+1);
int nLength = decode85(sBuffer, sOutBuffer);
free(sBuffer);
if(nLength == -1)
{
free(sOutBuffer);
return nil;
}
return [NSData dataWithBytesNoCopy:sOutBuffer length:nLength freeWhenDone:YES];
}
THX、あなたが参照されるソースは(Cで書かれているあなたは、私がREFEREウィキペディアのページでそれを見つけることができますに)。しかし、私は客観的な実装を優先します。 – Stephan
後者は前者の厳密なスーパーセットであるため、CコードはObjective C環境でうまく動作します。あなたはまた、NSStringや友人のすべての関数を見つけることができます結果を変換するchar *。あるいは、コードが〜200行しかないので、objのコードをフレームワーククラスで簡単に書き換えることができます。 – MrTJ
Objective-CではCを使用できます。 –