Ios .NETJSON序列化为图像/二进制数据使用哪种编码格式

Ios .NETJSON序列化为图像/二进制数据使用哪种编码格式,ios,.net,uiimage,restkit,Ios,.net,Uiimage,Restkit,我正在调用一个返回图像的RESTFul服务,该服务是在.NET中编写的,问题是我尝试了base64解码,但它没有正确解码图像,无法显示,该服务正在iOS客户端中调用,我想知道它是否使用了一些不同的编码格式 这是我的iOS应用程序端的代码,它使用Base64编码/解码 static char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static char decodi

我正在调用一个返回图像的RESTFul服务,该服务是在.NET中编写的,问题是我尝试了base64解码,但它没有正确解码图像,无法显示,该服务正在iOS客户端中调用,我想知道它是否使用了一些不同的编码格式

这是我的iOS应用程序端的代码,它使用Base64编码/解码

static char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static char decodingTable[128];

+ (void) initialize {
    if (self == [Base64 class]) {
        memset(decodingTable, 0, ArrayLength(decodingTable));
        for (NSInteger i = 0; i < ArrayLength(encodingTable); i++) {
            decodingTable[encodingTable[i]] = i;
        }
    }
}


+ (NSString*) encode:(const uint8_t*) input length:(NSInteger) length {
    NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
    uint8_t* output = (uint8_t*)data.mutableBytes;

    for (NSInteger i = 0; i < length; i += 3) {
        NSInteger value = 0;
        for (NSInteger j = i; j < (i + 3); j++) {
            value <<= 8;

            if (j < length) {
                value |= (0xFF & input[j]);
            }
        }

        NSInteger index = (i / 3) * 4;
        output[index + 0] =                    encodingTable[(value >> 18) & 0x3F];
        output[index + 1] =                    encodingTable[(value >> 12) & 0x3F];
        output[index + 2] = (i + 1) < length ? encodingTable[(value >> 6)  & 0x3F] : '=';
        output[index + 3] = (i + 2) < length ? encodingTable[(value >> 0)  & 0x3F] : '=';
    }

    return [[[NSString alloc] initWithData:data
                                  encoding:NSASCIIStringEncoding] autorelease];
}


+ (NSString*) encode:(NSData*) rawBytes {
    return [self encode:(const uint8_t*) rawBytes.bytes length:rawBytes.length];
}


+ (NSData*) decode:(const char*) string length:(NSInteger) inputLength {
    if ((string == NULL) || (inputLength % 4 != 0)) {
        return nil;
    }

    while (inputLength > 0 && string[inputLength - 1] == '=') {
        inputLength--;
    }

    NSInteger outputLength = inputLength * 3 / 4;
    NSMutableData* data = [NSMutableData dataWithLength:outputLength];
    uint8_t* output = data.mutableBytes;

    NSInteger inputPoint = 0;
    NSInteger outputPoint = 0;
    while (inputPoint < inputLength) {
        char i0 = string[inputPoint++];
        char i1 = string[inputPoint++];
        char i2 = inputPoint < inputLength ? string[inputPoint++] : 'A'; /* 'A' will decode to \0 */
        char i3 = inputPoint < inputLength ? string[inputPoint++] : 'A';

        output[outputPoint++] = (decodingTable[i0] << 2) | (decodingTable[i1] >> 4);
        if (outputPoint < outputLength) {
            output[outputPoint++] = ((decodingTable[i1] & 0xf) << 4) | (decodingTable[i2] >> 2);
        }
        if (outputPoint < outputLength) {
            output[outputPoint++] = ((decodingTable[i2] & 0x3) << 6) | decodingTable[i3];
        }
    }

    return data;
}


+ (NSData*) decode:(NSString*) string {
    return [self decode:[string cStringUsingEncoding:NSASCIIStringEncoding] length:string.length];
}

如果您有任何关于.NET JSON序列化的经验,您可能会很快发现这一点

我希望它使用base64,但如果没有看到任何一方的代码或示例数据,就很难判断出问题所在。请举个例子。你真的在使用RestKit吗?映像是否作为base64发送?没有足够的细节…@wain我在iOS端使用RestKit,但它无法解码图像,编写API的人对编码方式一无所知,他正在使用.NET客户端进行解码,它在那里工作得很好。@wain还收到了字符串形式的图像,并试图使用Base64代码attachedLookout对BigEndian/LittleEndian问题进行解码,每像素字节数,每行字节数?