# Range Conversions

## Recommended Posts

Quick functions for converting numbers in a range.

For Instance Convert 12 in a range from -8 to 90 to a proportional equivalent in 0 -to- 100 (or 78 -to- 900)

simple math but easier than retyping it

Returns Float or Int

_ConvertRange(Input Value, First Range Minimum, First Range Max, Second Range Min, Second Range Max)

Returns Float or Int

_ToPercent(Input Value, First Range Minimum, First Range Max)

(same as _ConvertRange(Input Value, First Range Minimum, First Range Max, 0, 100) )

For whatever you need them for.....

I *Believe* these functions work correctly...

they were probably created repetatively in thousands of codes but I after toiling to find them for certain usefulness

I figured I'd put them into AutoIt Functions for fun...

Note: make sure that the minimums are actually below the maximums (not by value..... -12 is smaller than -2 or 1 ... etc.)

```Func _ConvertRange(\$i, \$n, \$x, \$nb, \$xb)
;converts a number in a range of numbers
;proportionally to number in another range
;despite whether the numbers are negative or not
\$C = (((\$i - \$n) / (\$x - \$n)) * (\$xb - \$nb)) + \$nb
Return \$C
EndFunc
; Note: Sometimes it's necessary to find an InvertRange number, this is simply done:
;_ConvertRange(\$range_input, \$range_min, \$range_x,         \$range_x, \$range_min)
; eg:   (10,   0,100)=90     (1,    1,88)=88

Func _ToPercent(\$i, \$n, \$x)
\$P = 100 * ((\$i - \$n) / (\$x - \$n));
Return \$P
EndFunc```
Edited by crashdemons

My Projects - WindowDarken (Darken except the active window) Yahsmosis Chat Client (Discontinued) StarShooter Game (Red alert! All hands to battlestations!) YMSG Protocol Support (Discontinued) Circular Keyboard and OSK example. (aka Iris KB) Target Screensaver Drive Toolbar Thingy Rollup Pro (Minimize-to-Titlebar & More!) 2D Launcher physics example Ascii Screenshot AutoIt3 Quine Example ("Is a Quine" is a Quine.) USB Lock (Another system keydrive - with a toast.)

##### Share on other sites

Since I dont feel like wasting another thread on these simple but useful funcs,

ill just add it to my current post.

Just alot of IP useful/stupid funcs

some have come along and been rewritten from when I created them in PHP

Modifications and improvements welcome

_IPChr - Converts an IP string to a 4-byte string

_IPStr - Converts a 4-byte string to a IP string

_IPArray - Output Array in a 4-element array (yeah I know, actually 5 unnecessarily)

_IPArrayStr - Array to IP

_IPBlockMax - Finds the maximum IP in an IP-Block

_IsIPinBlock - Tests whether an IP is inside the given IP-Block

_CalcIP - Outputs an IP in decimal form (easier to do range and distance operations)

_DecalcIP - Outputs a decimal-form IP as an actual IP

_IsIPInRange - Tests whether an IP is between two other IP's

_RangeIP - Finds the distance between two IP's (distance measured in decimal)

_MovIP - Finds the IP which is a given distance from the given IP

```Func _IPChr(\$sIP)
Local \$aIP, \$cIP=''
\$aIP=StringSplit(\$sIP,'.')
For \$i=1 To UBound(\$aIP)-1
\$cIP&=Chr(\$aIP[\$i])
Next
\$aIP=''
Return \$cIP
EndFunc
Func _IPStr(\$cIP)
Local \$aIP, \$sIP=''
\$aIP=StringSplit(\$cIP,'')
If (UBound(\$aIP)-1)<4 Then Return -1
For \$i=1 To 4
\$sIP&=Asc(\$aIP[\$i])
if \$i<4 then \$sIP&='.'
Next
\$aIP=''
Return \$sIP
EndFunc
Func _IPArray(\$IP)
\$aIP=StringSplit(\$IP,'.')
;\$uIP=Ubound(\$aIP)-1
;For \$i=1 To \$uIP
;   \$aIP[\$i]=_IPSegmentNormalize(\$aIP[\$i])
;Next
Return \$aIP
EndFunc
Func _IPArrayStr(\$aIP,\$start=1)
Dim \$start
Return \$aIP[\$start]&'.'&\$aIP[\$start+1]&'.'&\$aIP[\$start+2]&'.'&\$aIP[\$start+3]
EndFunc
Func _CalcIP(\$IP)
;;Calculates and IP as a decimal value
\$ip_array=_IPArray(\$IP)
Return (\$ip_array[4] + (\$ip_array[3]*256) + (\$ip_array[2]*65536) + (\$ip_array[1]*16777216));

EndFunc
func _DecalcIP(\$ipv)
;;Calculates an IP from a decimal value
return _MovIP("0.0.0.0", \$ipv);
EndFunc
Func _IsIPInRange(\$IP,\$IPa,\$IPb)
;; Checks whether an IP is between two other IP's
\$IPa=_CalcIP(\$IPa)
\$IPv=_CalcIP(\$IP)
\$IPb=_CalcIP(\$IPb)
If \$IPa<=\$IPv And \$IPv<=\$IPb Then Return True
Return False
EndFunc

Func _RangeIP(\$ipa,\$ipb)
;;Determines the distance between two IP's (by number of IP's between them)
\$ipa=_CalcIP(\$ipa);
\$ipb=_CalcIP(\$ipb);
if \$ipa>\$ipb Then
\$ipt=\$ipa
\$ipa=\$ipb
\$ipb=\$ipt
\$ipt='';
EndIf
\$dist=Abs(\$ipb - \$ipa);
return \$dist;
EndFunc
Func _IPBlockMax(\$IP_block)
;;Returns the maximum IP in the IP block
; IP/Block eg:    0.0.0.0/8    _IPBlockMax('0.0.0.0/8') = 0.255.255.255
\$aBL=StringSplit(\$IP_block,'/')
\$IP=\$aBL[1]
If Ubound(\$aBL)<3 Then MsgBox("Program Error","IP-Block Error: '"&\$IP_block&"' is an invalid IPv4 Block.")
\$block=\$aBL[2]
\$aBL=''
\$number_of_hosts=2^(32 - \$block)-1
Return _MovIP(\$IP, \$number_of_hosts)
EndFunc
Func _IsIPinBlock(\$IP,\$IP_block)
;; Checks whether an IP is in the IP block specified
\$aBL=StringSplit(\$IP_block,'/')
\$IPa=_CalcIP(\$aBL[1])
\$IPv=_CalcIP(\$IP)
\$IPb=_CalcIP(_IPBlockMax(\$IP_block))
\$aBL=''
If \$IPa<=\$IPv And \$IPv<=\$IPb Then Return True
Return False
EndFunc
Func _MovIP(\$ip, \$change)
;;Moves and IP forward or backward by a number of IP's
;4294967295 is the maximum change value if you start at 0.0.0.0 (this will change to 255.255.255.255 using decalcip();)
\$ip_array=_IPArray(\$IP)
If \$change<0 Then
\$ip_array[1]=0
\$ip_array[2]=0
\$ip_array[3]=0
\$ip_array[4]=_CalcIP(\$ip)
If \$ip_array[4]<Abs(\$change) Then Return '0.0.0.0'
EndIf

\$ip_array[4]=\$ip_array[4] + \$change;
\$ipend=StringSplit('.....','.')
\$ipend[4]=16777216;
\$ipend[3]=65536;
\$ipend[2]=256;
\$ipend[1]=0;
For \$i=4 To 1 Step -1
For \$ii=4 To 2 Step -1
while \$ip_array[\$i]>(\$ipend[\$ii]-1)
\$ip_array[\$i]-=\$ipend[\$ii]
\$ip_array[\$i-(\$ii-1)]+=1;
WEnd
Next
If \$ip_array[1]>(\$ipend[2]-1) Then Return '255.255.255.255'
Next
return _IPArrayStr(\$ip_array)
EndFuncoÝ÷ ØrÙí±ç­ë~éÜ¶*'±él{^­æî¶Ø^ÉÊ.×±ËF QÞi×«~éÜ°*.Ô¶Èî²Ö­ªiÉû§rÚ¢éí&j|­g¬j{¦mêÞ½éåÊ
²)í¡©è¶«jw`÷rW·¦j)Ýz±g­)È¨Ä^¶¸½ë-è^i×«Â'm©Ýè Ú]jÖ T´8¦z{"¢{zÛ«Ëaz¯zqÖ­k­©¨v'âyØ^i×«Â'm©Ýè Ö®¶­sdgVæ2ô6÷VçE6WG2b33c¶Âb33c¶ ¶6÷VçG2FR6WG2öbb33c¶âb33c¶æBFR&VÖæFW  ²b33c¶6÷VÆB&R6ÖÆÆW"Fâb33c¶ b33c·#Õ7G&æu7ÆBb33²ââb33²Âb33²b33² b33c·%³ÓÓ b33c·%³ÓÓ bb33c¶fwC²b33c¶FVà b33c·%³ÓÒb33c¶ &WGW&âb33c·  VæD` bb33c¶Òb33c¶FVà b33c·%³ÓÓ b33c·%³ÓÓ &WGW&âb33c·  VæD` b33c·%³ÓÔçBb33c¶òb33c¶ b33c·%³ÓÒb33c¶Òb33c·%³Ò¢b33c¶ &WGW&âb33c· ¤VæDgVæ0¤gVæ2ôtdvWDFÖVç6öç2b33c¶vfFF ·&WG&WfW2FRvGFæBVvBtbBÖ'FRFÖVç6öâVFW  b33c·#Õ7G&æu7ÆBb33²âb33²Âb33²b33² b33c·SÔ627G&ætÖBb33c¶vfFFÃÃ£#S` b33c·S#Ô627G&ætÖBb33c¶vfFFÃÃ£#S` b33c·%³ÓÔ627G&ætÖBb33c¶vfFFÃrÃ²b33c·S b33c·%³ÓÔ627G&ætÖBb33c¶vfFFÃÃ²b33c·S  &WGW&âb33c· ¤VæDgVæ0¤gVæ2ôte6WDFÖVç6öç2b33c¶vfFFÂb33c·sÓÂb33c¶Ó ·6WG2FRBÖ'FRFÖVç6öâVFW"W6ærFRvfVâvGFæBVv@ FÒb33c·rÂb33c¶ b33c·SÓ b33c·S#Ó b33c¶óÕô6÷VçE6WG2b33c·rÃ#Sb b33c¶ó#Õô6÷VçE6WG2b33c¶Ã#Sb b33c·SÒb33c¶ó³Ð b33c·sÒb33c¶ó³Ð b33c·S#Òb33c¶ó%³Ð b33c¶Òb33c¶ó%³Ð b33c¶ÆVãÔ6"²b33c·rf×´6"²b33c·Sf×´6"²b33c¶f×´6"²b33c·S" b33c¶vfFFÕõ7G&æu&WÆ6U6V7Föâb33c¶vfFFÃrÃÂb33c¶ÆVâ &WGW&âb33c¶vfFF¤VæDgVæ0```
Edited by crashdemons

My Projects - WindowDarken (Darken except the active window) Yahsmosis Chat Client (Discontinued) StarShooter Game (Red alert! All hands to battlestations!) YMSG Protocol Support (Discontinued) Circular Keyboard and OSK example. (aka Iris KB) Target Screensaver Drive Toolbar Thingy Rollup Pro (Minimize-to-Titlebar & More!) 2D Launcher physics example Ascii Screenshot AutoIt3 Quine Example ("Is a Quine" is a Quine.) USB Lock (Another system keydrive - with a toast.)

##### Share on other sites

... Reply Editbox is broken trying to edit my last post... hrmmm anyway I forgot some things:

String Functions (one is required in GIF header editing)

_StringReplaceSection - Replaces a section of a string with a substring using original-string positions alone

_StringInject - Implants a substring inside a string at the given position

```Func _StringReplaceSection(\$string,\$start,\$end, \$substring)
\$first=''
\$last=''
\$l=StringLen(\$string)
If (\$start-1)>0 Then \$first=StringMid(\$string,1,\$start-1)
If (\$end+1)<=\$l Then \$last=StringMid(\$string,\$end+1)
;For \$i=1 To \$l
;   If \$i<\$start Then \$first&=StringMid(\$string,\$i,1)
;   If \$i>\$end Then \$last&=StringMid(\$string,\$i,1)
;Next
Return \$first&\$substring&\$last
EndFunc
Func _StringInject(\$string, \$position, \$substring)
If \$position<=1 Then Return \$substring&\$string
If \$position>StringLen(\$string) Then Return \$string&\$substring
\$d1=''
If (\$position-1)>0 Then \$d1=StringMid(\$string,1,\$position-1)
\$d2=\$substring
\$d3=StringMid(\$string,\$position)
Return \$d1&\$d2&\$d3
EndFunc```

My Projects - WindowDarken (Darken except the active window) Yahsmosis Chat Client (Discontinued) StarShooter Game (Red alert! All hands to battlestations!) YMSG Protocol Support (Discontinued) Circular Keyboard and OSK example. (aka Iris KB) Target Screensaver Drive Toolbar Thingy Rollup Pro (Minimize-to-Titlebar & More!) 2D Launcher physics example Ascii Screenshot AutoIt3 Quine Example ("Is a Quine" is a Quine.) USB Lock (Another system keydrive - with a toast.)

## Create an account

Register a new account

• ### Recently Browsing   0 members

×

• Wiki

• Back

• #### Beta

• Git
• FAQ
• Our Picks
×
• Create New...