[ad_1]
こんにちは、みんな
文字列を入力として受け取り、文字セットUTF16BEを使用してBase64を出力するC関数を作成する必要があります。
以下の Base64_code 関数は UTF8 を生成します。
誰かが私を助けてくれることを本当に願っています
皆さんありがとう
ジョバンニ
私が試したこと:
void Base64_code(IN const CHAR* strIn, OUT CString& strOut) { const static CHAR base64ABC[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; strOut.Empty(); const size_t len = strlen(strIn); for (size_t i = 0; i < len; i += 3) { LONG l = (((LONG)strIn[i]) << 16) | (((i + 1) < len) ? (((LONG)strIn[i + 1]) << 8) : 0) | (((i + 2) < len) ? ((LONG)strIn[i + 2]) : 0); strOut += base64ABC[(l >> 18) & 0x3F]; strOut += base64ABC[(l >> 12) & 0x3F]; if (i + 1 < len) strOut += base64ABC[(l >> 6) & 0x3F]; if (i + 2 < len) strOut += base64ABC[(l) & 0x3F]; } switch (len % 3) { case 1: strOut += '='; case 2: strOut += '='; } }
解決策 2
これを行うには 2 つの簡単な方法があります。
1. 文字を作成するたびに、それを同等の UTF16BE に変換し、それを出力配列に格納します。
2. データ ブロック全体を変換した後、結果の文字列を同等の UTF16BE に変換します。
解決策 1
以下のコードを試してみてください
#include
#include
#include <文字列.h>
静的なconst charのbase64_table[65] = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”;
char* utf16be_base64_encode(const char* 入力) {
サイズ_t 入力_len = strlen(入力);
サイズ_t 出力_len = ((入力_len * 2 + 1) / 3) * 4 + 1;
char* 出力 = (char*)malloc(output_len);
if (出力 == NULL) {
printf(“メモリの割り当てに失敗しました。\n”);
NULL を返します。
}
サイズ_t i、j;
uint32_t val = 0;
uint8_t バイト[3];
size_t 出力位置 = 0;
for (i = 0; i < input_len; i += 2) {
バイト[0] = (uint8_t)入力[i];
バイト[1] = (uint8_t)入力[i + 1];
val = (バイト[0] << 8) | バイト[1];
for (j = 0; j < 4; ++j) {
出力[output_pos++] =base64_テーブル[(val >> 18) & 0x3F];
val <<= 6;
}
}
if (input_len % 2 != 0) {
バイト[0] = (uint8_t)入力[input_len – 1];
バイト[1] = 0;
val = (バイト[0] << 8) | バイト[1];
for (j = 0; j < 3; ++j) {
出力[output_pos++] =base64_テーブル[(val >> 18) & 0x3F];
val <<= 6;
}
出力[output_pos++] = ‘=’;
}
出力[output_pos] = ‘\0’;
出力を返します。
}
int main() {
const char* input = “こんにちは、世界!”;
char* エンコード = utf16be_base64_encode(入力);
if (エンコードされた != NULL) {
printf(“Base64 (UTF-16BE): %s\n”、エンコード済み);
無料(エンコード);
}
0を返します。
}
[ad_2]
コメント