質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Qt Creator

Qt Creatorは、Qtアプリケーションを開発するための開発統合環境(IDE)です。

Q&A

解決済

1回答

3325閲覧

整数からQByteArrayへの変換方法

tuyudaku

総合スコア75

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Qt Creator

Qt Creatorは、Qtアプリケーションを開発するための開発統合環境(IDE)です。

0グッド

0クリップ

投稿2019/07/01 05:47

2バイトの整数型からQByteArrayへの変換方法が分かりません...

quint16から2バイト分のQByteArrayへ変換したいのですが
直接対応しているわけではなさそうなので、どのようにするべきか悩んでおります

QByteArray::numberではintuintからじゃないと対応していないみたいなので
4バイトになってしまいますし
文字列からQByteArray::fromHexで変換できたなと思い出して
QByteArray::fromHex(QString::number(quint16))というような感じでやってみたのですが
どうも厳密には文字列じゃないみたいなので上手く行きませんでした...

どうにかスマートな変換方法はありませんでしょうか?
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

どうなってほしいかが書いてないので正確な回答ではないかもしれませんが、以下のような感じかなと思います。

cpp

1qDebug() << QByteArray::number(quint16(0xFA), 16); 2"fa"

追記: 何かしらの生データを QByteArray の API を使って通信するような場合、QDataStream を利用するのが Qt 的なやり方です。

cpp

1 quint16 number = 0xABCD; 2 QByteArray data; 3 QDataStream out(&data, QIODevice::WriteOnly); 4 out << number; 5 qDebug() << data.size() << data.toHex();
2 "abcd"

QByteArray -> quint16 の逆変換も QDataStream で行えます。

投稿2019/07/01 05:59

編集2019/07/01 06:24
tasuku.

総合スコア347

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tuyudaku

2019/07/01 06:12

>どうなってほしいかが書いてないので 確かに...重要なところでした。 失礼しました... >以下のような感じかなと思います。 自分が行った方法とほぼ同じだなと思い、今一度確認してみたのですが 最初: qDebug() << QByteArray::number(quint16(0xFFFF), 16).toHex(); というような感じで行っていたのですが その結果が "66666666" となってしまっていたため困っていたところなのですが。 試しにtoHex()を外してみたところ "ffff" と表示されました... お騒がせしました...解決です ただ、QByteArrayのサイズを見ると4バイトになってしまっているのですが これは後でリサイズするしか方法は無いでしょうか? できれば一発で2バイトのサイズになると気持ち良いのですが
tuyudaku

2019/07/01 06:56

>何かしらの生データを QByteArray の API を使って通信するような場合 まったくその通りでして QSerialPortを使って、シリアル通信を行うのにQByteArrayを使ってやろうと考えていました。 >QDataStream を利用するのが Qt 的なやり方です。 そうなんですね!試しに使ってみようと思ったのですが QByteArray* packet_data = new QByteArray(); QDataStream binary_out(packet_data, QIODevice::WriteOnly); 上記の2行目で variable 'QDataStream binary_out' has initializer but incomplete type QDataStream binary_out(packet_data, QIODevice::WriteOnly); ^ とエラーが出てしまいました... 何か使い方が間違っていますでしょうか? なんどもすみません...
tasuku.

2019/07/01 07:01 編集

#include <QDataStream> をしてください。
tuyudaku

2019/07/01 07:15

>#include <QDataStream> をしてください。 あ、はい... なんか申し訳ない... ただ、何とか動作することができました!! QDataStreamを利用するのがQt的なやり方という情報ありがとうございます! 確かにこちらの方が使いやすそうですのですぐにこちらに切り替えていきます! 回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問