teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

8

修正

2020/10/04 04:38

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  コメントを受けて少し前進しました。0以降も取得変換できたものの
26
26
  途中から 0x4 が、 0x04, 0x00と2バイトに。
27
- 最後のstd::string str1に変換する際は、1バイトに戻ってほしいのですが、
27
+ 最後のstd::string strに変換する際は、1バイトに戻ってほしいのですが、
28
28
  ```ここに言語を入力
29
29
  char n[] = { 4, 5, 0, 6, 7, };
30
30
  int size = sizeof(n);

7

修正

2020/10/04 04:38

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  コメントを受けて少し前進しました。0以降も取得変換できたものの
26
26
  途中から 0x4 が、 0x04, 0x00と2バイトに。
27
- 最後のstd::string str2に変換する際は、1バイトに戻ってほしいのですが、
27
+ 最後のstd::string str1に変換する際は、1バイトに戻ってほしいのですが、
28
28
  ```ここに言語を入力
29
29
  char n[] = { 4, 5, 0, 6, 7, };
30
30
  int size = sizeof(n);
@@ -33,8 +33,6 @@
33
33
 
34
34
  // CString -> string変換
35
35
  char* pref = (char*)cstring.GetBuffer(nByteNum);
36
- std::string str1(pref, pref+nByteNum);
36
+ std::string str(pref, pref+nByteNum);
37
37
 
38
- // string -> CString変換
39
- std::string str2((char*)cstring.GetBuffer(), nByteNum);
40
38
  ```

6

追記

2020/10/04 04:05

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -20,4 +20,21 @@
20
20
 
21
21
  cstring.ReleaseBuffer();
22
22
  str_a.ReleaseBuffer();
23
+ ```
24
+
25
+ コメントを受けて少し前進しました。0以降も取得変換できたものの
26
+ 途中から 0x4 が、 0x04, 0x00と2バイトに。
27
+ 最後のstd::string str2に変換する際は、1バイトに戻ってほしいのですが、
28
+ ```ここに言語を入力
29
+ char n[] = { 4, 5, 0, 6, 7, };
30
+ int size = sizeof(n);
31
+ CString cstring(n, size); // charから直接変換
32
+ int nByteNum= cstring.GetLength() * sizeof(TCHAR);
33
+
34
+ // CString -> string変換
35
+ char* pref = (char*)cstring.GetBuffer(nByteNum);
36
+ std::string str1(pref, pref+nByteNum);
37
+
38
+ // string -> CString変換
39
+ std::string str2((char*)cstring.GetBuffer(), nByteNum);
23
40
  ```

5

修正

2020/10/04 04:03

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  以下のソースはバイナリデータをCStringとstringで相互変換しようとしています。
4
4
 
5
5
  ```c++
6
- char n[] = { 1, 3, 0, 4, 13, };
6
+ char n[] = { 4, 5, 0, 6, 7, };
7
7
  int size = sizeof(n);
8
8
  CString cstring(n, size); // charから直接変換 失敗
9
9
  std::string str(n, n + size); // charから直接変換 成功

4

修正

2020/10/04 00:40

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- バイナリデータ{ 1, 3, 0, 4, 13, }をCStringにしたいのですが、3までしか変換できません。
1
+ バイナリデータ{ 4, 5, 0, 6, 7, }をCStringにしたいのですが、5までしか変換できません。
2
2
  途中に入っている0のせいだと思うのですが、0も含めて変換したい場合はどうすればいいのでしょうか?
3
3
  以下のソースはバイナリデータをCStringとstringで相互変換しようとしています。
4
4
 

3

修正

2020/10/04 00:40

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -8,10 +8,16 @@
8
8
  CString cstring(n, size); // charから直接変換 失敗
9
9
  std::string str(n, n + size); // charから直接変換 成功
10
10
 
11
-   // string -> CString変換
11
+ // string -> CString変換
12
12
  CString str_a;
13
13
  str_a = CA2W{ str.c_str(), CP_UTF8 };
14
14
 
15
-   // CString -> string変換
15
+ // CString -> string変換1
16
- std::string str_b{ CW2A{ str_a.GetBuffer(size), CP_UTF8 } };
16
+ std::string str_b{ CW2A{ str_a.GetBuffer(5), CP_UTF8 } };
17
+
18
+ // CString -> string変換2
19
+ std::string str_c{ CW2A{ cstring.GetBuffer(5), CP_UTF8 } };
20
+
21
+ cstring.ReleaseBuffer();
22
+ str_a.ReleaseBuffer();
17
23
  ```

2

修正

2020/10/04 00:32

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- バイナリデータをCStringに変換
1
+ char配列をCStringに変換
body CHANGED
@@ -13,5 +13,5 @@
13
13
  str_a = CA2W{ str.c_str(), CP_UTF8 };
14
14
 
15
15
    // CString -> string変換
16
- std::string str_b{ CW2A{ str_a, CP_UTF8 } };
16
+ std::string str_b{ CW2A{ str_a.GetBuffer(size), CP_UTF8 } };
17
17
  ```

1

syuusei

2020/10/04 00:28

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes