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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Q&A

解決済

1回答

4163閲覧

[Objevice-C] NSDataの中身をint型の変数に格納したい

SatoTakeshiX

総合スコア113

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

0グッド

0クリップ

投稿2015/11/25 07:16

BLEデバイスと連携するiOSアプリを作っています。
デバイスと接続してキャラクタリスティックを読み込みをしたところ、NSDataのdescriptionの表記通りにint型の変数に代入する方法がわからず、質問をいたしました。

今以下の様なメソッドを実装しています。

lang

1//データの読み出しが完了すると呼ばれる 2-(void) peripheral:(CBPeripheral *)peripheral 3didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic 4 error:(NSError *)error 5{ 6//指定のキャラクタリスティックの時だけ実行 7if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:kUUIDforCharacteristics]]){ 8 9 int byte; 10 NSLog(@"データ:%@", [characteristic.value description]); 11 12 //バイト取り出す 13 [characteristic.value getBytes:&byte length:characteristic.value.length]; 14 15 NSLog(@"バイト表示:%d", byte); 16 }

実行結果は以下です。

2015-11-25 15:55:40.794 XXXX[6760:1485566] データ:<00000271 001b> 2015-11-25 15:55:50.066 XXXX[6760:1485566] バイト表示:1895956480

int型変数byteの1895956480を16進数に直すと71020000になります。
順番が異なっているのも変ですが、とりあえず、characteristic.valueの<00000271 001b>の下4桁,
001bのデータがbyte変数に代入されていません。

この下4桁の数値も変数へ代入する方法を教えていただきたく思います。

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

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

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

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

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

guest

回答1

0

ベストアンサー

intのサイズは4バイトなので入らないんじゃないでしょうか?

とりあえずこれでいける?

ObjectiveC

1long byte; 2または、 3long long byte;

サイズ確認をしてみましょう。

Objective

1NSLog(@"sizeof(int)=%ld", (long)sizeof(int)); 2NSLog(@"sizeof(long)=%ld", (long)sizeof(long)); 3NSLog(@"sizeof(long long)=%ld", (long)sizeof(long long)); 4NSLog(@"characteristic.value.length=%ld", (long)characteristic.value.length);

投稿2015/11/25 08:17

fuzzball

総合スコア16731

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

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

SatoTakeshiX

2015/11/25 08:28

fuzzballさんありがとうございます! >intのサイズは4バイトなので入らないんじゃないでしょうか? ご指摘の通り、characteristic.valueのサイズ6バイトでintのサイズだと入らないのが原因でした。 long long 型の変数にして代入します! ありがとうございました!開発進められそうです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問