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

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

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

integerは、一般的に整数を表します。プラスやマイナス、ゼロもなりうる全ての数です。(例 : -2, -1, 0, 1, 2...)

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

4回答

6483閲覧

javascriptでの符号付き整数の扱い方

shinfrom

総合スコア9

integer

integerは、一般的に整数を表します。プラスやマイナス、ゼロもなりうる全ての数です。(例 : -2, -1, 0, 1, 2...)

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

2クリップ

投稿2019/03/20 00:23

編集2019/03/20 00:37

javascriptで符号付きの整数が扱えません。
具体的にはarduinoからsigned intで作成したHEXを送信したものをnode-redで扱いたいのですが、
マイナスの符号がついたものを送信したときにうまく変換っできません。
具体的には、parseIntを使って変換しているのですが、符号なしと判断してしまうようです。
符号付きの整数として変換する方法があれば教えていただけませんか?

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

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

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

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

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

m.ts10806

2019/03/20 00:33

CとかC++とかタグにつけられていますが「Arduino」自体もタグにあるのでそちらを利用された方が良いのでは?
shinfrom

2019/03/20 00:34

ありがとうございます。そうします。
guest

回答4

0

ちょっと分かりにくいコードになりますが、送り元のintが32ビットだとすると、

JavaScript

1function HextoInt32(str){ 2 return Int32Array.from([parseInt(str,16)])[0]; 3}

投稿2019/03/20 00:49

otn

総合スコア85766

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

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

miyabi-sun

2019/03/20 01:17

Node.jsにもInt32Arrayを確認し、 同様のコードをREPLで打ち込んだら動きました。すごい!
guest

0

バイトコードをどのように読み込んでいるか分からないのですが、arrayBufferにできるでしょうから、typedArrayを使うのではダメなのですか?

js

1var bytecode = Uint8Array.from([0xff,0xff,0xff,0xff]).buffer; // バイトコード (仮) 2var int32Array = new Int32Array(bytecode); 3int32Array[0] 4 5/* 6-1 7*/

投稿2019/03/20 01:27

Lhankor_Mhy

総合スコア36898

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

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

0

ベストアンサー

signed intで作成したHEXを送信したものをnode-redで扱いたいのですが

ふむふむ

具体的には、parseIntを使って変換しているのですが、符号なしと判断してしまうようです。

node-redということは、こいつの中身はNode.jsですか?
Node.jsはサーバーサイドの動作をさせる為に、Bufferというオブジェクトが定義されており、
バイトコードの読み書きをスムーズに行えるメソッドが用意されています。

Hexならば一度Bufferに変換した後、サイン付きのInt変換で数値に変化すれば良いでしょう。
軽くNode.jsのプロセスを立ち上げて確認したところ、最上位が0x80以上ならば負数になりました。
buf.readInt32BE(offset)

もし素のJavaScriptでどうしてもやる必要があるならば、
型付き配列が定義されているので良い感じに変換すれば実現出来ると思います。
こちらは私も詳しくないので調査してみてください。

投稿2019/03/20 00:47

miyabi-sun

総合スコア21194

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

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

0

符号付きの整数として変換する方法があれば教えていただけませんか?

intの幅を把握した上で、「最上位ビットが立っていたら適切に減算してマイナスの値に変換する」しかないと思います。

投稿2019/03/20 00:27

maisumakun

総合スコア145930

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

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

shinfrom

2019/03/20 00:36

ありがとうございます。 ビット演算で減算していくという理解でいいです?
maisumakun

2019/03/20 00:37

「ビット演算」なんて大げさなものではなく、ただの引き算です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問