Base Conversion - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: HP Software Libraries (/forum-10.html) +--- Forum: HP Prime Software Library (/forum-15.html) +--- Thread: Base Conversion (/thread-6235.html) Pages: 1 2 |
Base Conversion - Stevetuc - 05-12-2016 06:46 AM This program will convert between any base, with the user being prompted for the required output base. It uses B→R() to first convert any base to decimal, then R→B() to convert to desired base: Code: EXPORT Baseconv(a) I have hardcoded bits as 32. This could be set via another choose() or passed as Fn parameter. If you prefer to access via a user key, it can be done like this: Code: KEY K_3() Either method will work with rpn mode , so long as the input is already on the stack. EDIT: replace 32 in R→B(B→R(a),32,b-1) with GETBITS(#) to use the current system setting for integer size Steve RE: Base Conversion - jrozsas - 05-12-2016 09:21 AM Very good. It works perfectly. But is there any way to convert decimal to binary fraction with? Example: 10.5 (dec) to binary RE: Base Conversion - salvomic - 05-12-2016 09:55 AM a possible variant to choose "hardcoding"... Code:
RE: Base Conversion - jrozsas - 05-12-2016 01:10 PM Binary 1010 to decimal = #1010d ? RE: Base Conversion - salvomic - 05-12-2016 01:13 PM (05-12-2016 01:10 PM)jrozsas Wrote: Binary 1010 to decimal = #1010d ? hi Leo, Baseconv(#1010b) return #10d Salvo RE: Base Conversion - Stevetuc - 05-12-2016 02:11 PM Updated to allow bitwidth to be chosen as Salvomic proposed, and also allow default system bitwidth option. More meaningful variable names than a,b have used for readability. Code: EXPORT Baseconv(in) Steve RE: Base Conversion - salvomic - 05-12-2016 02:27 PM thank you Steve! it works fine! Salvo RE: Base Conversion - Stevetuc - 05-12-2016 04:42 PM Small tweak to allow option to use the input bitwidth: Code: EXPORT Baseconv(in) Steve RE: Base Conversion - salvomic - 05-12-2016 04:52 PM please, check the code: if the user choose Input the program return Error: Invalid input with Baseconv(255) It works well with Baseconv(#255d) The error is given when the program uses GETBITS(255) it should have an input like GETBITS(#255d) so it's needed a control when the user input a normal decimal number without # and the final "d"... RE: Base Conversion - Stevetuc - 05-12-2016 06:49 PM (05-12-2016 04:52 PM)salvomic Wrote: please, check the code: Salvo, This works with both Baseconv(255) and Baseconv(#255d) Hopefully no introduced bugs! [/code] Code: EXPORT Baseconv(in) RE: Base Conversion - salvomic - 05-12-2016 07:12 PM (05-12-2016 06:49 PM)Stevetuc Wrote: Salvo, This works with both Baseconv(255) and Baseconv(#255d) hi Stevetuc, it's ok to overcome the error but there is a last thing to solve: Baseconv(255) is seen always as it was Baseconv(#255h), as hex, so Baseconv(255) -> Hex -> Input return #255h and not the correct #FFh, I think that user mean 255 *is* decimal, otherwise it would have write #255h (597d) :-) With this code Code: IF LEFT(STRING(in),1) ≠ "#" THEN in:=EXPR("#"+in+"d") END; But... But if the user inputs Baseconv(#255) still the code interprets as #255h (it adds the "h" for hex) :-) In this case, maybe the user really means to say "#255h", otherwise he/she doesn't put the "#" first... However, besides that, it's ok! thank you Salvo RE: Base Conversion - Stevetuc - 05-12-2016 07:26 PM (05-12-2016 07:12 PM)salvomic Wrote:(05-12-2016 06:49 PM)Stevetuc Wrote: Salvo, This works with both Baseconv(255) and Baseconv(#255d) I think what happens is that it assumes the number is in whatever the default base is set to in settings. Mine is in decimal so it treats unqualified numbers as such. Hard coding to decimal will allow to override the settings but I guess this may not always produce the desired result Thanks for helping me debug this! Steve RE: Base Conversion - salvomic - 05-12-2016 07:31 PM (05-12-2016 07:26 PM)Stevetuc Wrote: I think what happens is that it assumes the number is in whatever the default base is set to in settings. Mine is in decimal so it treats unqualified numbers as such. Hard doing to decimal will allow to override the settings but I guess this may not allows produce the desired result yes, I agree. I think the program is already good enough for us! Very useful, thank you. Salvo RE: Base Conversion - Eddie W. Shore - 06-07-2016 01:08 PM Very nice program, gentlemen. I like the easier interface that the program presents. RE: Base Conversion - Stevetuc - 06-09-2016 03:22 PM Thanks Eddie. That was my motivation for writing it, I wanted an easy to use function for base conversion. I've updated the program with the following. Numbers without # are treated as decimal - as suggested by Salvomic Numbers with # but without explicit type are treated as per system setting for integers Unsigned/Signed support - if width is selected as 8,16,32 or 64 a choose box for unsigned/signed is presented. If Width is selected as System, then system setting for sign state is used. If Width is selected as Input, then the input sign state is used. Examples ( for this example system setting is hex 16bit unsigned) Baseconv(#−9:-15d) converted to binary 16 bit unsigned = #1111111111110111b Baseconv(#−9:-15d) Converted to binary 16bit signed= #−1001:-15b Baseconv(#−9:-15d) Converted to decimal 16bit unsigned = #65527d In the first and last case, the size :16 is not explicitly shown because it matches the current system width. If the system width subsequently changes, then these will become explicit. Code: EXPORT Baseconv(in) RE: Base Conversion - salvomic - 06-09-2016 03:33 PM great improvement! thank you. Salvo RE: Base Conversion - Stevetuc - 06-10-2016 09:19 AM One more tweak :-) Using the alternative command: SETBITS(SETBASE(in,base-1),bits) Turns out to be superior since there is no need to detect numbers entered without # , it handles them by default as decimal. Therefore we can remove this line: IF LEFT(STRING(in),1) ≠ "#" THEN in:=EXPR("#"+in+"d") END Code: EXPORT Baseconv(in) RE: Base Conversion - salvomic - 06-10-2016 09:51 AM it works well, thank you! Simple and useful program. Salvo RE: Base Conversion - Stevetuc - 06-11-2016 07:53 AM (06-10-2016 09:51 AM)salvomic Wrote: it works well, thank you! Thanks Salvo! Glad it's useful. RE: Base Conversion - JDW - 08-16-2018 03:56 AM (06-10-2016 09:19 AM)Stevetuc Wrote: One more tweak :-) Can somehow explain how to properly install and run these programs? I copied the text of the program listed in the earlier post, then I pasted it into a new TextWrangeler document on my Mac and saved it a UTF-8 file. Here is the file. But when I drag that file from off my Desktop and onto my Prime in the Connectivity Kit, the Connectivity Kit crashes. I crashes every time I try. Is the filename extension bad? Is the encoding bad? What's the trick? And once installed on my Prime (assuming I can ever get around these crashes), how do I execute the program? Thanks. |