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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1230
ceratorstrlen13解決


cerator

リンク

2009/12/30(Wed) 04:34:45|NO.29606

strlenで文字列の長さを取得していると、32767でこれ以上増加しなくなりました。
原因を教えてください。



この記事に返信する


Hatter

リンク

2009/12/30(Wed) 08:02:41|NO.29608

2byte(16bit)の正負ありの最大値は
(2*2*2*2)*(2*2*2*2)*(2*2*2*2)*(2*2*2*2)/2-1=32767
つまり、HSPの整数型変数は2byteなんですね〜。

それ以上の数値を扱えるモジュールかなんかがあるはずですよ〜。



ANTARES

リンク

2009/12/30(Wed) 08:07:58|NO.29609

 スクリプトがおかしいからです。



Hatter

リンク

2009/12/30(Wed) 08:08:30|NO.29610

今色々試したところ、strlenに限った話なので,通常の状態のHSPの使用上の限界ではなさそうです。
と思って更に色々やってみると自分の環境で以下のスクリプトを実行したところ正常に32767以上の数値を取得できました。
なにか別の問題では?


s="65336" repeat 50000 s+="A" loop mes strlen(s)



ANTARES

リンク

2009/12/30(Wed) 08:08:59|NO.29611

>つまり、HSPの整数型変数は2byteなんですね〜。
 4バイトです。



inovia

リンク

2009/12/30(Wed) 14:02:36|NO.29619

NULL文字が入っていて止まっている可能性はあります。


buf="アレックスと愉快な仲間たち\nとみせかけて実は違う" mes buf mes ""+strlen(buf)+"文字" // 改行コードをNULLに置き換え repeat tmp=wpeek(buf,cnt) if tmp=0x0A0D:wpoke buf,cnt,0:break if tmp=0:break loop mes buf mes ""+strlen(buf)+"文字"



KA

リンク

2009/12/31(Thu) 00:44:53|NO.29627

カウントしている変数から、2バイトだけ取り出しているとか。
実は表示だけが、2バイト分だったり。

スクリプトを出したほうが速いです。



cerator

リンク

2009/12/31(Thu) 01:14:02|NO.29628


MS = "" mesbox MS,200,200,1,0 repeat size = strlen(MS) wait 1 title "" + size loop
で他のスクリプト(500行ぐらい)をコピーして何度も貼り付けると、
32767でタイトルバーが動かなくなります。
増えなくなるだけで、減りはします。



inovia

リンク

2009/12/31(Thu) 01:18:46|NO.29629

mesbox のヘルプにありますが、

>p5が0の場合は、そのバージョンのWindowsで扱える最大文字数になります。

と書いてあるのでおそらくこれが原因では?



cerator

リンク

2009/12/31(Thu) 01:24:10|NO.29630

>inoviaさん
入力は手作業でもちゃんとできます。
やはり文字を足していくと、32767で停止して、
文字を削ると、32767以下になればきちんと減ります。
WindowsのバージョンはXPです。



GENKI

リンク

2009/12/31(Thu) 02:38:38|NO.29631

Vista sp2で動作確認してみました。

>>NO.29610
50005と表示されます。
現象が再現できません。
OSに依存する問題の可能性があります。

>>NO.29628
32766でtitleの数値が増えなくなりましたが、その他の現象は再現できました。
あらかじめsdimで十分なサイズを確保しておけば…とも思ったのですが、そうでもないようです。
問題はstrlenよりもmesboxにあるようです。



inovia

リンク

2009/12/31(Thu) 03:39:54|NO.29632

これならどーだ!


sdim MS,65536 mesbox MS,200,200,1,0 hEdit=objinfo(stat,2) button gosub "get",*get repeat sendmsg hEdit,0x000E,0,0 size = stat wait 1 title "" + size loop *get sendmsg hEdit,0x000E,0,0 size = stat sdim buf,size+1 sendmsg hEdit,0x000D,size+1,varptr(buf) dialog strlen(buf) return



KA

リンク

2009/12/31(Thu) 16:50:35|NO.29641

inoviaさんのは表示されました。
やはり mesbox か何かの仕様でしょう。


ceratorさん、hspの mesbox で、長編小説でも書きたいのですか?



cerator

リンク

2009/12/31(Thu) 17:59:07|NO.29644

>inoviaさん
サイズ表示がうまくいきました。
ありがとうございました。



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