Shop OBEX P1 Docs P2 Docs Learn Events
ASCII string to single variable decimal? — Parallax Forums

ASCII string to single variable decimal?

RavenkallenRavenkallen Posts: 1,057
edited 2010-08-03 03:19 in Propeller 1
Hey, guys. I have yet another problem. One that seems to be a little harder to figure out or perhaps i have done all i can. I have a homemade ASCII string to single variable converter. It works nice and gets the job done. The only problem is that it takes 50 or so lines of code to accomplish and that is a LOT of time if you are constantly using it. Here is my current code.....

var
long· decval, decval2, decval3, decval4
long varstore[noparse][[/noparse]4]

pub convert(dec4, dec3, dec2, dec) : finalval
varstore[noparse][[/noparse]3] := dec
varstore[noparse][[/noparse]2] := dec2
varstore[noparse][[/noparse]1] := dec3
varstore[noparse][[/noparse]0] := dec4
if varstore[noparse][[/noparse]3] == "0"
·decval := 0
if varstore[noparse][[/noparse]3] == "1"
·decval := 1
if varstore[noparse][[/noparse]3] == "2"
·decval := 2
if varstore[noparse][[/noparse]3] == "3"
·decval := 3
if varstore[noparse][[/noparse]3] == "4"
·decval := 4
if varstore[noparse][[/noparse]3] == "5"
·decval := 5
if varstore[noparse][[/noparse]3] == "6"
·decval := 6
if varstore[noparse][[/noparse]3] == "7"
·decval := 7
if varstore[noparse][[/noparse]3] == "8"
·decval := 8
if varstore[noparse][[/noparse]3] == "9"
·decval := 9

if varstore[noparse][[/noparse]2] == "0"
·decval2 := 0
if varstore[noparse][[/noparse]2] == "1"
·decval2 := 10
if varstore[noparse][[/noparse]2] == "2"
·decval2 := 20
if varstore[noparse][[/noparse]2] == "3"
·decval2 := 30
if varstore[noparse][[/noparse]2] == "4"
·decval2 := 40
if varstore[noparse][[/noparse]2] == "5"
·decval2 := 50
if varstore[noparse][[/noparse]2] == "6"
·decval2 := 60
if varstore[noparse][[/noparse]2] == "7"
·decval2 := 70
if varstore[noparse][[/noparse]2] == "8"
·decval2 := 80
if varstore[noparse][[/noparse]2] == "9"
·decval2 := 90

if varstore[noparse][[/noparse]1] == "0"
·decval3 := 0
if varstore[noparse][[/noparse]1] == "1"
·decval3 := 100
if varstore[noparse][[/noparse]1] == "2"
·decval3 := 200
if varstore[noparse][[/noparse]1] == "3"
·decval3 := 300
if varstore[noparse][[/noparse]1] == "4"
·decval3 := 400
if varstore[noparse][[/noparse]1] == "5"
·decval3 := 500
if varstore[noparse][[/noparse]1] == "6"
·decval3 := 600
if varstore[noparse][[/noparse]1] == "7"
·decval3 := 700
if varstore[noparse][[/noparse]1] == "8"
·decval3 := 800
if varstore[noparse][[/noparse]1] == "9"
·decval3 := 900
···
if varstore[noparse][[/noparse]0] == "0"
·decval4 := 0
if varstore[noparse][[/noparse]0] == "1"
·decval4 := 1000
if varstore[noparse][[/noparse]0] == "2"
·decval4 := 2000
if varstore[noparse][[/noparse]0] == "3"
·decval4 := 3000
if varstore[noparse][[/noparse]0] == "4"
·decval4 := 4000
if varstore[noparse][[/noparse]0] == "5"
·decval4 := 5000
if varstore[noparse][[/noparse]0] == "6"
·decval4 := 6000
if varstore[noparse][[/noparse]0] == "7"
·decval4 := 7000
if varstore[noparse][[/noparse]0] == "8"
·decval4 := 8000
if varstore[noparse][[/noparse]0] == "9"
·decval4 := 9000

finalval := decval + decval2 + decval3 + decval4


As you can see the acctual coding is quite simple but now i need something a little faster. If anybody has developed a faster routine for this please let me know. I have tried to think of·a way to speed it up but just couldn't put my finger on it. Perhaps this is the best i can do, but i just wanted to see if someone else was smarter than me....Thanks in advance>>>

P.S sorry about not using the attachment manager

▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Propeller + Picaxe = Romeo & Juliet

Comments

  • Duane DegnDuane Degn Posts: 10,588
    edited 2010-07-31 18:22
    ·Ravenkallen,

    I think this code should work.· You of course need to set up x and myString appropriately.

    
    
    PUB Main | x
     
      x := strToDec(@myString)  ' x will be set to final "result" below
     
    PUB strToDec(pointerToString) | size
     
      size := strsize(pointerToString)
      repeat size
        result := (result * 10) + (byte[noparse][[/noparse]pointerToString++] - "0") '
       
    DAT
    
      myString byte "1234", 0
    

    Duane

    ·Edit: added comments, local variables, DAT section

    Post Edited (Duane Degn) : 7/31/2010 6:35:17 PM GMT
  • Jay B. HarlowJay B. Harlow Posts: 79
    edited 2010-07-31 18:25
    Have you considered simply subtracting "0" (literly a zero character) from each digit.

    pub convert(dec4, dec3, dec2, dec) : finalval | decval, decval2, decval3, decval4
      decval := (dec - "0")
      decval2 := (dec2 - "0") * 10
      decval3 := (dec3 - "0") * 100
      decval4 := (dec4 - "0") * 1000
    
      finalval := decval + decval2 + decval3 + decval4
    
    



    Hope this helps
    Jay
  • RavenkallenRavenkallen Posts: 1,057
    edited 2010-08-01 03:11
    thank you for the help guys. I am not sure i follow though. So Jay, your version is only like 5 lines of code. If it works like i think it does i will be eternally awed

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Propeller + Picaxe = Romeo & Juliet
  • RavenkallenRavenkallen Posts: 1,057
    edited 2010-08-03 03:19
    OH, I get it now. When you subtract the ASCII "0" from the other number the remainder will be a decimal that you can just add. BRILLIANT. Thank you very much.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Propeller + Picaxe = Romeo & Juliet
Sign In or Register to comment.