質問編集履歴

3

解決

2023/08/05 15:45

投稿

Alyn
Alyn

スコア51

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

追記

2023/08/05 14:36

投稿

Alyn
Alyn

スコア51

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

タグ追加

2023/08/05 14:15

投稿

Alyn
Alyn

スコア51

test CHANGED
File without changes
test CHANGED
File without changes