回答編集履歴
1
元のソース修正と追加質問への回答
answer
CHANGED
@@ -13,8 +13,8 @@
|
|
13
13
|
for (std::size_t i=0; i < len; ++i)
|
14
14
|
{
|
15
15
|
if (i) std::cout << ", ";
|
16
|
-
std::cout << std::hex << std::setfill('0') << std::setw(8)
|
16
|
+
std::cout << "0x" << std::hex << std::setfill('0') << std::setw(8)
|
17
|
-
<<
|
17
|
+
<< buf[i];
|
18
18
|
}
|
19
19
|
}
|
20
20
|
|
@@ -50,4 +50,59 @@
|
|
50
50
|
|
51
51
|
バッファの組み立てはstd::vectorを使ってみました。効率は悪いですが、お手軽です。
|
52
52
|
|
53
|
-
sendData()でデバック用に0x付きの16進数表現で表示してみました。これは人が目で見て分かりやすいようにするためです。[マニュピュレータ](http://qiita.com/katabamisan/items/5c9600e839d1d6ef4d62)を使ってます。
|
53
|
+
sendData()でデバック用に0x付きの16進数表現で表示してみました。これは人が目で見て分かりやすいようにするためです。[マニュピュレータ](http://qiita.com/katabamisan/items/5c9600e839d1d6ef4d62)を使ってます。
|
54
|
+
|
55
|
+
---
|
56
|
+
【追加】
|
57
|
+
コメントにも書きましたが、数値表現については[Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE)等の記事を参考にされて下さい。
|
58
|
+
文字列からの変換サンプル・ソースはググってみたけど標準ライブラリを使わないケースを見つけることができませんでした。アルゴリズムを提示しているサイトは、数学的(文字列と数値を区別しない)に書いているところばかりでしたので、更に混乱しそうです。
|
59
|
+
|
60
|
+
簡単ですの書いてみました。エラー処理をほとんどしていませんので、想定外の文字列がdata1に入っているとエラーにならずに誤動作します。
|
61
|
+
|
62
|
+
```C++
|
63
|
+
void sendData(unsigned int buf[], int len, int hz);
|
64
|
+
|
65
|
+
int main()
|
66
|
+
{
|
67
|
+
char data1[20] = "123,456,789";
|
68
|
+
unsigned int buf[100];
|
69
|
+
|
70
|
+
int index=0;
|
71
|
+
buf[index]=0;
|
72
|
+
for (char* p=data1; *p != 0; ++p)
|
73
|
+
{
|
74
|
+
if (*p == ',')
|
75
|
+
{
|
76
|
+
++index;
|
77
|
+
buf[index]=0;
|
78
|
+
continue;
|
79
|
+
}
|
80
|
+
else if ((*p < '0') || ('9' < *p))
|
81
|
+
continue;
|
82
|
+
|
83
|
+
buf[index] *= 10;
|
84
|
+
buf[index] += *p-'0';
|
85
|
+
}
|
86
|
+
|
87
|
+
sendData(buf, index+1, 38);
|
88
|
+
|
89
|
+
return 0;
|
90
|
+
}
|
91
|
+
|
92
|
+
#include <iostream>
|
93
|
+
#include <iomanip>
|
94
|
+
|
95
|
+
void sendData(unsigned int buf[], int len, int hz)
|
96
|
+
{
|
97
|
+
for (std::size_t i=0; i < len; ++i)
|
98
|
+
{
|
99
|
+
if (i) std::cout << ", ";
|
100
|
+
std::cout << "0x" << std::hex << std::setfill('0') << std::setw(4)
|
101
|
+
<< buf[i];
|
102
|
+
}
|
103
|
+
}
|
104
|
+
```
|
105
|
+
|
106
|
+
EEPROMへ書き込むフォーマットに"0x"が追加されてますね。面倒なのでそれには対応していません。ご自身で改造されてみて下さい。
|
107
|
+
|
108
|
+
しかし、EEPROMへ書き込むフォーマットを選択できるのでしたら、最初からunsigned int buf[SIZE];形式で書いておけば楽と思います。
|