こんにちは。
カンマ区切りの0以上の10進数をunsigned intの並びへ変換して、sendData()を呼び出すのであれば、下記で出来ます。
C++
1#include <iostream>
2#include <iomanip>
3#include <sstream>
4#include <vector>
5
6void sendData(unsigned int buf[], int len, int hz)
7{
8 for (std::size_t i=0; i < len; ++i)
9 {
10 if (i) std::cout << ", ";
11 std::cout << "0x" << std::hex << std::setfill('0') << std::setw(8)
12 << buf[i];
13 }
14}
15
16int main()
17{
18 std::stringstream ss("123,456,789");
19 std::vector<unsigned int> buffer;
20
21 while(ss.good())
22 {
23 unsigned int data;
24 ss >> data;
25 if (ss.fail())
26 break;
27 buffer.push_back(data);
28
29 char delim=0;
30 ss >> delim;
31 if (delim != ',')
32 break;
33 }
34
35 sendData(&buffer[0], buffer.size(), 38);
36
37 return 0;
38}
数値定数は、0xを付けると16進数表現ができますが、文字列に"0x"を付けてもコンピュータにとっては文字列のままです。数値に変わるわけではありません。文字列を数値へ変換処理する必要が有ります。
変換方法には実に様々な方法がありますが、お手軽なstring streamを使ってみました。
std::cinから読み込む時と同じ処理で出来ます。
バッファの組み立てはstd::vectorを使ってみました。効率は悪いですが、お手軽です。
sendData()でデバック用に0x付きの16進数表現で表示してみました。これは人が目で見て分かりやすいようにするためです。マニュピュレータを使ってます。
【追加】
コメントにも書きましたが、数値表現についてはWikipedia等の記事を参考にされて下さい。
文字列からの変換サンプル・ソースはググってみたけど標準ライブラリを使わないケースを見つけることができませんでした。アルゴリズムを提示しているサイトは、数学的(文字列と数値を区別しない)に書いているところばかりでしたので、更に混乱しそうです。
簡単ですの書いてみました。エラー処理をほとんどしていませんので、想定外の文字列がdata1に入っているとエラーにならずに誤動作します。
C++
1void sendData(unsigned int buf[], int len, int hz);
2
3int main()
4{
5 char data1[20] = "123,456,789";
6 unsigned int buf[100];
7
8 int index=0;
9 buf[index]=0;
10 for (char* p=data1; *p != 0; ++p)
11 {
12 if (*p == ',')
13 {
14 ++index;
15 buf[index]=0;
16 continue;
17 }
18 else if ((*p < '0') || ('9' < *p))
19 continue;
20
21 buf[index] *= 10;
22 buf[index] += *p-'0';
23 }
24
25 sendData(buf, index+1, 38);
26
27 return 0;
28}
29
30#include <iostream>
31#include <iomanip>
32
33void sendData(unsigned int buf[], int len, int hz)
34{
35 for (std::size_t i=0; i < len; ++i)
36 {
37 if (i) std::cout << ", ";
38 std::cout << "0x" << std::hex << std::setfill('0') << std::setw(4)
39 << buf[i];
40 }
41}
EEPROMへ書き込むフォーマットに"0x"が追加されてますね。面倒なのでそれには対応していません。ご自身で改造されてみて下さい。
しかし、EEPROMへ書き込むフォーマットを選択できるのでしたら、最初からunsigned int buf[SIZE];形式で書いておけば楽と思います。