C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

string型からint型への変換について /usushio (19/07/11(Thu) 12:00) #91589
Re[1]: string型からint型への変換について /WebSurfer (19/07/11(Thu) 12:36) #91590
│└ Re[2]: string型からint型への変換について /usushio (19/07/11(Thu) 13:09) #91592
│  └ Re[3]: string型からint型への変換について /WebSurfer (19/07/11(Thu) 14:15) #91594
│    └ Re[4]: string型からint型への変換について /usushio (19/07/12(Fri) 15:55) #91606
Re[1]: string型からint型への変換について /774RR (19/07/11(Thu) 13:07) #91591
  └ Re[2]: string型からint型への変換について /usushio (19/07/11(Thu) 13:33) #91593
    └ Re[3]: string型からint型への変換について /774RR (19/07/11(Thu) 14:59) #91595
      └ Re[4]: string型からint型への変換について /usushio (19/07/12(Fri) 15:56) #91607 解決済み


親記事 / ▼[ 91590 ] ▼[ 91591 ]
■91589 / 親階層)  string型からint型への変換について
□投稿者/ usushio (25回)-(2019/07/11(Thu) 12:00:39)

分類:[C/C++] 

Microsoft VisualC++で開発を行っております。

232Cでデータの送信を行おうとしています。
送信するためのデータとして以下のデータをバイトデータに変換しようと思っています。

std::string makeData[8] = {"57","01","00","00","02","3A","",""};


配列に00や0x00が含まれる場合には配列の終端を示しているとありました。
00の情報まで送信したいのですが、バイトデータを送信したい際には
int型に変換して送信できるのでしょうか。

[ □ Tree ] 返信 編集キー/

▲[ 91589 ] / ▼[ 91592 ]
■91590 / 1階層)  Re[1]: string型からint型への変換について
□投稿者/ WebSurfer (1856回)-(2019/07/11(Thu) 12:36:23)
No91589 (usushio さん) に返信

> 配列に00や0x00が含まれる場合には配列の終端を示しているとありました。

文字 '0' は ASCII コードで 0x30 なので、文字列 "00" はバイト列で 0x30 0x30 になり、
そのバイト列をそのまま送信すれば良いという訳ではないのでしょうか?
[ 親 91589 / □ Tree ] 返信 編集キー/

▲[ 91590 ] / ▼[ 91594 ]
■91592 / 2階層)  Re[2]: string型からint型への変換について
□投稿者/ usushio (26回)-(2019/07/11(Thu) 13:09:56)
No91590 (WebSurfer さん) に返信
> ■No91589 (usushio さん) に返信
>
>>配列に00や0x00が含まれる場合には配列の終端を示しているとありました。
>
> 文字 '0' は ASCII コードで 0x30 なので、文字列 "00" はバイト列で 0x30 0x30 になり、
> そのバイト列をそのまま送信すれば良いという訳ではないのでしょうか?


返答ありがとうござます。

配列に格納している"00"はASCIIコードの0x00として送信したいと思っております。
配列には、HEXデータを文字列として保持させています。


[ 親 91589 / □ Tree ] 返信 編集キー/

▲[ 91592 ] / ▼[ 91606 ]
■91594 / 3階層)  Re[3]: string型からint型への変換について
□投稿者/ WebSurfer (1857回)-(2019/07/11(Thu) 14:15:18)
No91592 (usushio さん) に返信

> 配列に格納している"00"はASCIIコードの0x00として送信したいと思っております。
> 配列には、HEXデータを文字列として保持させています。

意味不明です。最初の質問の、

"57","01","00","00","02","3A"

はそれぞれ 0x57, 0x00, 0x00, 0x02, 0x3A というバイト列を送りたい?

では、,"","" はどうしたいのですか?

そもそも、最初の質問にあった、

> 配列に00や0x00が含まれる場合には配列の終端を示しているとありました。

は何か勘違いしてませんか?

[ 親 91589 / □ Tree ] 返信 編集キー/

▲[ 91594 ] / 返信無し
■91606 / 4階層)  Re[4]: string型からint型への変換について
□投稿者/ usushio (28回)-(2019/07/12(Fri) 15:55:13)
No91594 (WebSurfer さん) に返信
> ■No91592 (usushio さん) に返信

>>配列に00や0x00が含まれる場合には配列の終端を示しているとありました。
>
> は何か勘違いしてませんか?
>

私自身違う認識で覚えていたのでしょうか。
再度、学習しなおします。


[ 親 91589 / □ Tree ] 返信 編集キー/

▲[ 91589 ] / ▼[ 91593 ]
■91591 / 1階層)  Re[1]: string型からint型への変換について
□投稿者/ 774RR (713回)-(2019/07/11(Thu) 13:07:16)
どう変換すると適切なのか読者には規則がわからないっすよ

"57" を 0x35 0x37 に変換するのか(要するに変換なし)
"57" を 0x57 に変換するのか( ASCII->BINARY )
"" ってどう変換するの? 実は終了マーク?

> 配列に00や0x00が含まれる場合には配列の終端を示しているとありました。
ちょっと違う

たぶんこの文言が開設しているのは「 C の文字列」のことで std::string の話ぢゃない
C において文字列とは char の配列の一部分のことで 0x00 までだ、ってことだろう。

char hoge[] = { 'h', 'o', 'g', 'e', '\0', 'p', 'i', 'y', 'o' };
があるとき、この配列の大きさは9文字分、文字列としては "hoge" の5文字分
今回の変換規則には全く関係ない

[ 親 91589 / □ Tree ] 返信 編集キー/

▲[ 91591 ] / ▼[ 91595 ]
■91593 / 2階層)  Re[2]: string型からint型への変換について
□投稿者/ usushio (27回)-(2019/07/11(Thu) 13:33:20)
No91591 (774RR さん) に返信

返答ありがとうございます。
> どう変換すると適切なのか読者には規則がわからないっすよ
>
> "57" を 0x35 0x37 に変換するのか(要するに変換なし)
> "57" を 0x57 に変換するのか( ASCII->BINARY )
> "" ってどう変換するの? 実は終了マーク?

言葉足らずでした、申し訳ありません。
"57"の文字列を0x57に変換し、最終的には01010111に変換したいと思っています。
これを配列内のすべてに適用し、Checksumの算出を行うため、変換をバイトコードへの変換を考えています。
""は文字列を囲んで表すためのマークであると認識しています
そのため、変換は行うつもりはありません。


[ 親 91589 / □ Tree ] 返信 編集キー/

▲[ 91593 ] / ▼[ 91607 ]
■91595 / 3階層)  Re[3]: string型からint型への変換について
□投稿者/ 774RR (714回)-(2019/07/11(Thu) 14:59:19)
たぶんに std::string など全く不要で単純に「バイトの列」にすればよく

#define elementsof(x) (sizeof(x)/sizeof(0[x]))
const uint8_t makedata[] = { 0x57, 0x01, 0x00, 0x00, 0x02, 0x3A };
TransmitData(makedata, elementsof(makedata));

で OK これならチェックサムや CRC を計算するのも簡単。

単なるバイト列として扱うとき 0x00 が配列途中にあっても「終端」ぢゃないっすよ。単に値。
今やるべきことは、バイト列+バイト数をセットにして扱うのが適切でしょ。
「文字列」という語は今は完全に忘れ去るべき時。

[ 親 91589 / □ Tree ] 返信 編集キー/

▲[ 91595 ] / 返信無し
■91607 / 4階層)  Re[4]: string型からint型への変換について
□投稿者/ usushio (29回)-(2019/07/12(Fri) 15:56:19)
No91595 (774RR さん) に返信
> たぶんに std::string など全く不要で単純に「バイトの列」にすればよく
>
> #define elementsof(x) (sizeof(x)/sizeof(0[x]))
> const uint8_t makedata[] = { 0x57, 0x01, 0x00, 0x00, 0x02, 0x3A };
> TransmitData(makedata, elementsof(makedata));
>
> で OK これならチェックサムや CRC を計算するのも簡単。
>
> 単なるバイト列として扱うとき 0x00 が配列途中にあっても「終端」ぢゃないっすよ。単に値。
> 今やるべきことは、バイト列+バイト数をセットにして扱うのが適切でしょ。
> 「文字列」という語は今は完全に忘れ去るべき時。
>


ありがとうございます。
回答していただいた内容を参考に、データの作成を行うことができました。
解決済み
[ 親 91589 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -