本文整理汇总了C++中NPT_DataBuffer::SetBufferSize方法的典型用法代码示例。如果您正苦于以下问题:C++ NPT_DataBuffer::SetBufferSize方法的具体用法?C++ NPT_DataBuffer::SetBufferSize怎么用?C++ NPT_DataBuffer::SetBufferSize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NPT_DataBuffer
的用法示例。
在下文中一共展示了NPT_DataBuffer::SetBufferSize方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
/*----------------------------------------------------------------------
| NPT_Base64::Decode
+---------------------------------------------------------------------*/
NPT_Result
NPT_Base64::Decode(const char* base64,
NPT_Size size,
NPT_DataBuffer& data,
bool url_safe /* = false */)
{
// estimate the data size
data.SetBufferSize(size);
// reset the buffer
data.SetDataSize(0);
// keep a pointer to the buffer
unsigned char* buffer = data.UseData();
NPT_Size data_size = 0;
// iterate over all characters
unsigned char codes[4];
unsigned int code_count = 0;
while (size--) {
unsigned char c = *base64++;
if (c >= NPT_ARRAY_SIZE(NPT_Base64_Bytes)) continue;
if (url_safe) {
// remap some characters and forbid the mapped variants
if (c == '-') {
c = '+';
} else if (c == '_') {
c = '/';
} else if (c == '+' || c == '/') {
c = 0; // will be ignored later
}
}
signed char code = NPT_Base64_Bytes[c];
if (code >= 0) {
// valid code
codes[code_count++] = code;
if (code_count == 4) {
// group complete
if (codes[0] == NPT_BASE64_PAD_BYTE || codes[1] == NPT_BASE64_PAD_BYTE) {
return NPT_ERROR_INVALID_FORMAT;
}
if (codes[2] == NPT_BASE64_PAD_BYTE) {
// pad at char 3
if (codes[3] == NPT_BASE64_PAD_BYTE) {
// double padding
unsigned int packed = (codes[0]<<2)|(codes[1]>>4);
buffer[data_size++] = (unsigned char)packed;
} else {
// invalid padding
return NPT_ERROR_INVALID_FORMAT;
}
} else if (codes[3] == NPT_BASE64_PAD_BYTE) {