数値の桁数を計算するためにHSPMathのlog10関数を使用。おまけとしてTrim関数がついてます。
2008.05.17 memcpyをなくすことで計量化
// 自力で型変換
// 2008.05.17 計量化
#module
#include "hspmath.as"
// 文字列の始めと終わりにある半角スペースを除去
#defcfunc Trim str s, local target, local target_length, local result
target = s
target_length = strlen( target )
repeat target_length
start_idx = cnt
if peek( target, start_idx ) != ' ' : break
loop
repeat target_length, 1
end_idx = target_length - cnt
if peek( target, end_idx ) != ' ' : break
loop
result = strmid( target, start_idx, end_idx + 1 - start_idx )
return result
#define ctype not_digit(%1) ((%1) < '0' | '9' < (%1))
// 文字列を整数値に変換
#defcfunc str2int str s, local target, local result, local target_length
result = 0
target = Trim( s )
if peek( target ) = '-' : sign = -1 : else : sign = 1
if peek( target ) = '-' | peek( target ) = '+' {
target = strmid( target, 1, strlen( target ) - 1 )
}
target_length = strlen( target )
for i, iStart, target_length
if not_digit( peek( target, i ) ) : _break
result = result * 10 + peek( target, i ) - '0'
next
return result * sign
// 整数値を文字列に変換
#defcfunc int2str int p, local target, local result, local result_length
if p = 0 : return "0"
target = abs( p )
result_length = 1 + log10( target ) + ( p < 0 )
sdim result, result_length + 1
repeat 1 + log10( target ), 1
poke result, result_length - cnt, ( target \ 10 ) + '0'
target /= 10
loop
if p < 0 {
poke result, 0, '-'
}
return result
#global
0 件のコメント:
コメントを投稿