如何将这个C++函数转换为Objective-C
How to convert this C++ function to Objective-C?
我的C++知识很糟糕,我需要以正确的方式转换C++函数。
这是我的代码(摘录自http://www.sky.franken.de/doxy/xmlstorage/c++/base64_8cpp_source.html).
void* base64_decode(const char* s, size_t& data_len)
{
size_t len = strlen(s);
if (len % 4)
throw Exception("invalid BASE64 string length");
unsigned char* data = (unsigned char*) malloc(len/4*3);
int n[4];
unsigned char* q = (unsigned char*) data;
for(const char*p=s; *p; ) {
n[0] = POS(*p++);
n[1] = POS(*p++);
n[2] = POS(*p++);
n[3] = POS(*p++);
if (n[0]==-1 || n[1]==-1)
throw Exception("invalid BASE64 encoding");
if (n[2]==-1 && n[3]!=-1)
throw Exception("invalid BASE64 encoding");
q[0] = (n[0] << 2) + (n[1] >> 4);
if (n[2] != -1) q[1] = ((n[1] & 15) << 4) + (n[2] >> 2);
if (n[3] != -1) q[2] = ((n[2] & 3) << 6) + n[3];
q += 3;
}
data_len = q-data - (n[2]==-1) - (n[3]==-1);
return data;
}
我需要这个以前的功能来拥有这个标题
void * base64_decode(const char* s, size_t * data_len)
所以,你可以看到这是一个"&"answers"*"在标题上的问题。正如你所看到的,第一个功能有这个
size_t& data_len
在标题中,但我需要它来接受形式的数据长度
size_t * data_len
我不知道如何将第一个转换为第二个,或者换句话说,我必须对该方法执行什么样的更改才能使其与以"size_t*"提供的data_len一起工作
void* base64_decode(const char* s, size_t* data_len_ptr)
{
size_t len = strlen(s);
if (len % 4)
[NSException raise:@"Invalid input in base64_decode" format:@"%d is an invalid length for an input string for BASE64 decoding", len];
unsigned char* data = (unsigned char*) malloc(len/4*3);
int n[4];
unsigned char* q = (unsigned char*) data;
for(const char*p=s; *p; )
{
n[0] = POS(*p++);
n[1] = POS(*p++);
n[2] = POS(*p++);
n[3] = POS(*p++);
if (n[0]==-1 || n[1]==-1)
[NSException raise:@"Invalid input in base64_decode" format:@"Invalid BASE64 encoding"];
if (n[2]==-1 && n[3]!=-1)
[NSException raise:@"Invalid input in base64_decode" format:@"Invalid BASE64 encoding"];
q[0] = (n[0] << 2) + (n[1] >> 4);
if (n[2] != -1) q[1] = ((n[1] & 15) << 4) + (n[2] >> 2);
if (n[3] != -1) q[2] = ((n[2] & 3) << 6) + n[3];
q += 3;
}
// make sure that data_len_ptr is not null
if (!data_len_ptr)
[NSException raise:@"Invalid input in base64_decode" format:@"Invalid destination for output string length"];
*data_len_ptr = q-data - (n[2]==-1) - (n[3]==-1);
return data;
}
调用函数如下所示:
const char* string = /*Base-64 encoded string*/;
size_t data_len;
void* decoded_data = base64_decode(string, &data_len);
// the length of the decoded data is now indicated by data_len
无论何时看到data_len.something
,都将其更改为data_len->something
,无论何时只看到data_len
,都将它更改为*data_len
。
用替换倒数第二行
*data_len = q-data - (n[2]==-1) - (n[3]==-1);
或者更好的是,为iOS找到一个现成的Base64实现。这些数字很多。
相关文章:
- 如何使用Rcpp将R函数转换为C++函数
- C++函数转换为 C# 函数
- 将 C 函数转换为 C++ 以检查数字是否有效
- C++:从重载函数转换为 std::function
- 将 C 函数转换为C++语言
- C++隐式构造函数转换,后跟类型向上转换
- 将 lambda 函数转换为具有混合 lambda 引入器和参数列表的函子结构
- 通过 Boost Python 将 Python 函数转换为 C++,用作回调
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- 如何将函数转换为 lambda 函数
- 自定义函数转换错误?
- 将 C# 哈希函数转换为C++
- 将 lambda 函数转换为另一个编译单元中的普通函数会缩短编译时间吗?
- 加快 R 性能或将 R 函数转换为C++函数
- 将成员函数转换为指向成员函数的指针
- 将MATLAB炒作函数转换为C
- Rcpp - 用二进制函数转换数字向量?
- C lambda函数转换误差
- 此语法中的构造函数转换错误
- 将函数转换为find_if lambda