HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
1021
たまごlpokeについてバグなのか仕様なのかやってはいけないことなのか4解決


たまご

リンク

2018/10/21(Sun) 18:03:40|NO.85635

こんばんは
lpokeですこし戸惑っているのですが


data="" lpoke data,0,$46464952 lpoke data,4,$000d7574 lpoke data,8,$45564157 lpoke data,12,$20746d66 lpoke data,16,$00000010 data+="ABCD"

みたいにやるとABCDのデータが途中の00があるところから上書きしてしまうのです

実際の挙動
52 49 46 46 74 75 0D 41 42 43 44 00 66 6D 74 20
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
こちらの望んでいた挙動
52 49 46 46 74 75 0D 00 57 41 56 45 66 6D 74 20
10 00 41 42 43 44 00 00 00 00 00 00 00 00 00 00

バグなのでしょうか?仕様なのでしょうか?やってはいけないことなのでしょうか?



この記事に返信する


f(残業中)

リンク

2018/10/21(Sun) 18:23:17|NO.85636

>こちらの望んでいた挙動
>52 49 46 46 74 75 0D 00 57 41 56 45 66 6D 74 20
>10 00 41 42 43 44 00 00 00 00 00 00 00 00 00 00



>52 49 46 46 74 75 0D 【00】 57 41 56 45 66 6D 74 20

この0を文字列終端とみなされて

そこから

data+="ABCD"されて

>52 49 46 46 74 75 0D 【41:A】 【42:B】 【43:C】 【44:D】 【00:文字列終端】 66 6D 74 20


になっただけじゃね?



あらや

リンク

2018/10/21(Sun) 18:34:09|NO.85637

どちらかというと仕様ですね。

HSPでは文字列の終端コードを『0』として扱うのはご存知かと思います。
そして文字列処理系の命令や関数もそれに合わせた構造で作られている物がほとんどです。

strlenやstrmidなどもコード『0』を見つけた時点で文字列の終わりとして
それ以降にどんな数値が入っていても無視します。

>data+="ABCD"
この行も内部的に『0』の位置から上書きして
その後に『0』を付けるという構造になっているのでしょう。

そういうわけでlpokeだけでなく、
仮にwpokeやpokeを使っても同じ事になるかと思われます。



さか

リンク

2018/10/21(Sun) 18:42:24|NO.85638

やるなら以下ですかね。
メモリ確保外だとメモリ破壊になるので気を付けてください。

data="" mes "dataのメモリ上のサイズ:"+varsize(data) data=strf( "%20cABCD",' ' ) lpoke data,0,$46464952 lpoke data,4,$000d7574 lpoke data,8,$45564157 lpoke data,12,$20746d66 lpoke data,16,$00000010 repeat varsize(data)/4 mes strf("%08x", lpeek(data,i) ) i+=4 loop



たまご

リンク

2018/10/21(Sun) 21:24:55|NO.85644

ありがとうございました

参考になりました



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.85635への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2018(c) All rights reserved.