質問編集履歴
3
解決
test
CHANGED
File without changes
|
test
CHANGED
@@ -26,3 +26,61 @@
|
|
26
26
|
|
27
27
|
### 追記
|
28
28
|
UTF-8のデータからShift JISのデータに変換する方法があればそちらをお願いいたします。
|
29
|
+
|
30
|
+
### 解決後のソースコード
|
31
|
+
|
32
|
+
```c
|
33
|
+
#include <stdio.h>
|
34
|
+
#include <inttypes.h>
|
35
|
+
#include <wchar.h>
|
36
|
+
#include <string>
|
37
|
+
|
38
|
+
std::string UTF8toSjis(std::string srcUTF8)
|
39
|
+
{
|
40
|
+
//Unicodeへ変換後の文字列長を得る
|
41
|
+
int lenghtUnicode = MultiByteToWideChar(CP_UTF8, 0, srcUTF8.c_str(), srcUTF8.size() + 1, NULL, 0);
|
42
|
+
|
43
|
+
//必要な分だけUnicode文字列のバッファを確保
|
44
|
+
wchar_t* bufUnicode = new wchar_t[lenghtUnicode];
|
45
|
+
|
46
|
+
//UTF8からUnicodeへ変換
|
47
|
+
MultiByteToWideChar(CP_UTF8, 0, srcUTF8.c_str(), srcUTF8.size() + 1, bufUnicode, lenghtUnicode);
|
48
|
+
|
49
|
+
//ShiftJISへ変換後の文字列長を得る
|
50
|
+
int lengthSJis = WideCharToMultiByte(CP_THREAD_ACP, 0, bufUnicode, -1, NULL, 0, NULL, NULL);
|
51
|
+
|
52
|
+
//必要な分だけShiftJIS文字列のバッファを確保
|
53
|
+
char* bufShiftJis = new char[lengthSJis];
|
54
|
+
|
55
|
+
//UnicodeからShiftJISへ変換
|
56
|
+
WideCharToMultiByte(CP_THREAD_ACP, 0, bufUnicode, lenghtUnicode + 1, bufShiftJis, lengthSJis, NULL, NULL);
|
57
|
+
|
58
|
+
std::string strSJis(bufShiftJis);
|
59
|
+
|
60
|
+
delete bufUnicode;
|
61
|
+
delete bufShiftJis;
|
62
|
+
|
63
|
+
return strSJis;
|
64
|
+
}
|
65
|
+
|
66
|
+
int main()
|
67
|
+
{
|
68
|
+
char moji1[] = { 0xE3, 0x81, 0x82, 0x00 };
|
69
|
+
char moji2[] = "あ"; //Shift JIS (82 A0)
|
70
|
+
char result[10];
|
71
|
+
|
72
|
+
std::string ret = UTF8toSjis(moji1);
|
73
|
+
int len = sizeof(ret) / sizeof(string);
|
74
|
+
|
75
|
+
for (int i = 0; i < (len * 2); i++)
|
76
|
+
{
|
77
|
+
result[i] = ret[i];
|
78
|
+
}
|
79
|
+
|
80
|
+
printf("%s\n", moji1);
|
81
|
+
printf("%s\n", moji2);
|
82
|
+
printf("%s", result);
|
83
|
+
|
84
|
+
return 0;
|
85
|
+
}
|
86
|
+
```
|
2
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
int main()
|
16
16
|
{
|
17
17
|
char moji1[] = { 0xE3, 0x81, 0x82, 0x00 };
|
18
|
-
char moji2[] = "あ";
|
18
|
+
char moji2[] = "あ"; //Shift JIS (82 A0)
|
19
19
|
|
20
20
|
printf("%s\n", moji1);
|
21
21
|
printf("%s\n", moji2);
|
@@ -24,3 +24,5 @@
|
|
24
24
|
}
|
25
25
|
```
|
26
26
|
|
27
|
+
### 追記
|
28
|
+
UTF-8のデータからShift JISのデータに変換する方法があればそちらをお願いいたします。
|
1
タグ追加
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|