How to read string as hex number in bash?2019 Community Moderator ElectionIn bash, how to convert 8 bytes to an unsigned int (64bit LE)?Bash: integer expression expected, using read/testHow to change bash prompt string in current bash session?How to convert an special hex character from an html page in bash?Loop over a string in zsh and BashModifying empty string variable inside switch statement in function bashExtract Complex String Inside Parentheses in Linux BashConstruct bash array with only string formatprintf escape %q string vs variableHow are ext4fs checksums being calculated?

Help with identifying unique aircraft over NE Pennsylvania

When did hardware antialiasing start being available?

Is a square zero matrix positive semidefinite?

Determine voltage drop over 10G resistors with cheap multimeter

Is "inadequate referencing" a euphemism for plagiarism?

What is the tangent at a sharp point on a curve?

How do you justify more code being written by following clean code practices?

How to test the sharpness of a knife?

Emojional cryptic crossword

Should a narrator ever describe things based on a characters view instead of fact?

Does convergence of polynomials imply that of its coefficients?

UK Tourist Visa- Enquiry

TDE Master Key Rotation

Print a physical multiplication table

Recursively updating the MLE as new observations stream in

"Marked down as someone wanting to sell shares." What does that mean?

Do native speakers use "ultima" and "proxima" frequently in spoken English?

Should I be concerned about student access to a test bank?

Hackerrank All Women's Codesprint 2019: Name the Product

Exit shell with shortcut (not typing exit) that closes session properly

Are hand made posters acceptable in Academia?

Pre-Employment Background Check With Consent For Future Checks

Do I need an EFI partition for each 18.04 ubuntu I have on my HD?

CLI: Get information Ubuntu releases



How to read string as hex number in bash?



2019 Community Moderator ElectionIn bash, how to convert 8 bytes to an unsigned int (64bit LE)?Bash: integer expression expected, using read/testHow to change bash prompt string in current bash session?How to convert an special hex character from an html page in bash?Loop over a string in zsh and BashModifying empty string variable inside switch statement in function bashExtract Complex String Inside Parentheses in Linux BashConstruct bash array with only string formatprintf escape %q string vs variableHow are ext4fs checksums being calculated?










3















I have the bash line:



expr substr $SUPERBLOCK 64 8


Which is return to me string line:



00080000


I know that this is, actually, a 0x00080000 in little-endian. Is there a way to create integer-variable from it in bash in big-endian like 0x80000?










share|improve this question




























    3















    I have the bash line:



    expr substr $SUPERBLOCK 64 8


    Which is return to me string line:



    00080000


    I know that this is, actually, a 0x00080000 in little-endian. Is there a way to create integer-variable from it in bash in big-endian like 0x80000?










    share|improve this question


























      3












      3








      3








      I have the bash line:



      expr substr $SUPERBLOCK 64 8


      Which is return to me string line:



      00080000


      I know that this is, actually, a 0x00080000 in little-endian. Is there a way to create integer-variable from it in bash in big-endian like 0x80000?










      share|improve this question
















      I have the bash line:



      expr substr $SUPERBLOCK 64 8


      Which is return to me string line:



      00080000


      I know that this is, actually, a 0x00080000 in little-endian. Is there a way to create integer-variable from it in bash in big-endian like 0x80000?







      bash numeric-data hex expr






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 5 hours ago









      Jesse_b

      13.7k23471




      13.7k23471










      asked 6 hours ago









      DenisNovacDenisNovac

      186




      186




















          2 Answers
          2






          active

          oldest

          votes


















          4














          Probably a better way to do this but I've come up with this solution which converts the number to decimal and then back to hex (and manually adds the 0x):



          printf '0x%xn' "$((16#00080000))"


          Which you could write as:



          printf '0x%xn' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"





          share|improve this answer























          • Thank you! I actually added |rev inside to convert to big-endian: printf "$((16#$(expr substr $SUPERBLOCK 64 8|rev)))"

            – DenisNovac
            5 hours ago







          • 5





            @DenisNovac I'm not sure if you use big/little endian correctly (maybe you have something else on mind, but I'm doing some assembly programming for fun, so for me endianness is per bytes), but 0x12345678 is in other endianness 0x78563412, not 0x87654321. (and the value in your question 00080000 is after byte swap 00000800, i.e. 2048 decimal)

            – Ped7g
            5 hours ago












          • Oh, you are right. I just got the right answer by wrong way. I am rewriting some code from python to bash, so i know all answers before i got them.

            – DenisNovac
            5 hours ago











          • @DenisNovac: You didn't have the right answer FYI. 0x8000 was originally in your question which is not the same as 0x80000 or 0x00080000

            – Jesse_b
            5 hours ago












          • Yes, but i needed to get exactly 0x8000, so i've made mistake somewhere before. This is offset or something.

            – DenisNovac
            5 hours ago


















          2














          There are two more or less standard (and ancient) command-line unix tools that offer very easy ways to convert numbers between different bases:



          $ echo '16'; echo i; echo 00080000; echo p; | dc
          524288
          $ echo 'ibase=16'; echo 00080000; | bc
          524288


          For normal human use I very much prefer bc, but when writing a program that generates code, especially from a parser of some sort, a stack-based tool like dc may be easier to deal with (and indeed the original version of bc was a front-end parser for dc).






          share|improve this answer






















            Your Answer








            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "106"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f507044%2fhow-to-read-string-as-hex-number-in-bash%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            4














            Probably a better way to do this but I've come up with this solution which converts the number to decimal and then back to hex (and manually adds the 0x):



            printf '0x%xn' "$((16#00080000))"


            Which you could write as:



            printf '0x%xn' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"





            share|improve this answer























            • Thank you! I actually added |rev inside to convert to big-endian: printf "$((16#$(expr substr $SUPERBLOCK 64 8|rev)))"

              – DenisNovac
              5 hours ago







            • 5





              @DenisNovac I'm not sure if you use big/little endian correctly (maybe you have something else on mind, but I'm doing some assembly programming for fun, so for me endianness is per bytes), but 0x12345678 is in other endianness 0x78563412, not 0x87654321. (and the value in your question 00080000 is after byte swap 00000800, i.e. 2048 decimal)

              – Ped7g
              5 hours ago












            • Oh, you are right. I just got the right answer by wrong way. I am rewriting some code from python to bash, so i know all answers before i got them.

              – DenisNovac
              5 hours ago











            • @DenisNovac: You didn't have the right answer FYI. 0x8000 was originally in your question which is not the same as 0x80000 or 0x00080000

              – Jesse_b
              5 hours ago












            • Yes, but i needed to get exactly 0x8000, so i've made mistake somewhere before. This is offset or something.

              – DenisNovac
              5 hours ago















            4














            Probably a better way to do this but I've come up with this solution which converts the number to decimal and then back to hex (and manually adds the 0x):



            printf '0x%xn' "$((16#00080000))"


            Which you could write as:



            printf '0x%xn' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"





            share|improve this answer























            • Thank you! I actually added |rev inside to convert to big-endian: printf "$((16#$(expr substr $SUPERBLOCK 64 8|rev)))"

              – DenisNovac
              5 hours ago







            • 5





              @DenisNovac I'm not sure if you use big/little endian correctly (maybe you have something else on mind, but I'm doing some assembly programming for fun, so for me endianness is per bytes), but 0x12345678 is in other endianness 0x78563412, not 0x87654321. (and the value in your question 00080000 is after byte swap 00000800, i.e. 2048 decimal)

              – Ped7g
              5 hours ago












            • Oh, you are right. I just got the right answer by wrong way. I am rewriting some code from python to bash, so i know all answers before i got them.

              – DenisNovac
              5 hours ago











            • @DenisNovac: You didn't have the right answer FYI. 0x8000 was originally in your question which is not the same as 0x80000 or 0x00080000

              – Jesse_b
              5 hours ago












            • Yes, but i needed to get exactly 0x8000, so i've made mistake somewhere before. This is offset or something.

              – DenisNovac
              5 hours ago













            4












            4








            4







            Probably a better way to do this but I've come up with this solution which converts the number to decimal and then back to hex (and manually adds the 0x):



            printf '0x%xn' "$((16#00080000))"


            Which you could write as:



            printf '0x%xn' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"





            share|improve this answer













            Probably a better way to do this but I've come up with this solution which converts the number to decimal and then back to hex (and manually adds the 0x):



            printf '0x%xn' "$((16#00080000))"


            Which you could write as:



            printf '0x%xn' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered 5 hours ago









            Jesse_bJesse_b

            13.7k23471




            13.7k23471












            • Thank you! I actually added |rev inside to convert to big-endian: printf "$((16#$(expr substr $SUPERBLOCK 64 8|rev)))"

              – DenisNovac
              5 hours ago







            • 5





              @DenisNovac I'm not sure if you use big/little endian correctly (maybe you have something else on mind, but I'm doing some assembly programming for fun, so for me endianness is per bytes), but 0x12345678 is in other endianness 0x78563412, not 0x87654321. (and the value in your question 00080000 is after byte swap 00000800, i.e. 2048 decimal)

              – Ped7g
              5 hours ago












            • Oh, you are right. I just got the right answer by wrong way. I am rewriting some code from python to bash, so i know all answers before i got them.

              – DenisNovac
              5 hours ago











            • @DenisNovac: You didn't have the right answer FYI. 0x8000 was originally in your question which is not the same as 0x80000 or 0x00080000

              – Jesse_b
              5 hours ago












            • Yes, but i needed to get exactly 0x8000, so i've made mistake somewhere before. This is offset or something.

              – DenisNovac
              5 hours ago

















            • Thank you! I actually added |rev inside to convert to big-endian: printf "$((16#$(expr substr $SUPERBLOCK 64 8|rev)))"

              – DenisNovac
              5 hours ago







            • 5





              @DenisNovac I'm not sure if you use big/little endian correctly (maybe you have something else on mind, but I'm doing some assembly programming for fun, so for me endianness is per bytes), but 0x12345678 is in other endianness 0x78563412, not 0x87654321. (and the value in your question 00080000 is after byte swap 00000800, i.e. 2048 decimal)

              – Ped7g
              5 hours ago












            • Oh, you are right. I just got the right answer by wrong way. I am rewriting some code from python to bash, so i know all answers before i got them.

              – DenisNovac
              5 hours ago











            • @DenisNovac: You didn't have the right answer FYI. 0x8000 was originally in your question which is not the same as 0x80000 or 0x00080000

              – Jesse_b
              5 hours ago












            • Yes, but i needed to get exactly 0x8000, so i've made mistake somewhere before. This is offset or something.

              – DenisNovac
              5 hours ago
















            Thank you! I actually added |rev inside to convert to big-endian: printf "$((16#$(expr substr $SUPERBLOCK 64 8|rev)))"

            – DenisNovac
            5 hours ago






            Thank you! I actually added |rev inside to convert to big-endian: printf "$((16#$(expr substr $SUPERBLOCK 64 8|rev)))"

            – DenisNovac
            5 hours ago





            5




            5





            @DenisNovac I'm not sure if you use big/little endian correctly (maybe you have something else on mind, but I'm doing some assembly programming for fun, so for me endianness is per bytes), but 0x12345678 is in other endianness 0x78563412, not 0x87654321. (and the value in your question 00080000 is after byte swap 00000800, i.e. 2048 decimal)

            – Ped7g
            5 hours ago






            @DenisNovac I'm not sure if you use big/little endian correctly (maybe you have something else on mind, but I'm doing some assembly programming for fun, so for me endianness is per bytes), but 0x12345678 is in other endianness 0x78563412, not 0x87654321. (and the value in your question 00080000 is after byte swap 00000800, i.e. 2048 decimal)

            – Ped7g
            5 hours ago














            Oh, you are right. I just got the right answer by wrong way. I am rewriting some code from python to bash, so i know all answers before i got them.

            – DenisNovac
            5 hours ago





            Oh, you are right. I just got the right answer by wrong way. I am rewriting some code from python to bash, so i know all answers before i got them.

            – DenisNovac
            5 hours ago













            @DenisNovac: You didn't have the right answer FYI. 0x8000 was originally in your question which is not the same as 0x80000 or 0x00080000

            – Jesse_b
            5 hours ago






            @DenisNovac: You didn't have the right answer FYI. 0x8000 was originally in your question which is not the same as 0x80000 or 0x00080000

            – Jesse_b
            5 hours ago














            Yes, but i needed to get exactly 0x8000, so i've made mistake somewhere before. This is offset or something.

            – DenisNovac
            5 hours ago





            Yes, but i needed to get exactly 0x8000, so i've made mistake somewhere before. This is offset or something.

            – DenisNovac
            5 hours ago













            2














            There are two more or less standard (and ancient) command-line unix tools that offer very easy ways to convert numbers between different bases:



            $ echo '16'; echo i; echo 00080000; echo p; | dc
            524288
            $ echo 'ibase=16'; echo 00080000; | bc
            524288


            For normal human use I very much prefer bc, but when writing a program that generates code, especially from a parser of some sort, a stack-based tool like dc may be easier to deal with (and indeed the original version of bc was a front-end parser for dc).






            share|improve this answer



























              2














              There are two more or less standard (and ancient) command-line unix tools that offer very easy ways to convert numbers between different bases:



              $ echo '16'; echo i; echo 00080000; echo p; | dc
              524288
              $ echo 'ibase=16'; echo 00080000; | bc
              524288


              For normal human use I very much prefer bc, but when writing a program that generates code, especially from a parser of some sort, a stack-based tool like dc may be easier to deal with (and indeed the original version of bc was a front-end parser for dc).






              share|improve this answer

























                2












                2








                2







                There are two more or less standard (and ancient) command-line unix tools that offer very easy ways to convert numbers between different bases:



                $ echo '16'; echo i; echo 00080000; echo p; | dc
                524288
                $ echo 'ibase=16'; echo 00080000; | bc
                524288


                For normal human use I very much prefer bc, but when writing a program that generates code, especially from a parser of some sort, a stack-based tool like dc may be easier to deal with (and indeed the original version of bc was a front-end parser for dc).






                share|improve this answer













                There are two more or less standard (and ancient) command-line unix tools that offer very easy ways to convert numbers between different bases:



                $ echo '16'; echo i; echo 00080000; echo p; | dc
                524288
                $ echo 'ibase=16'; echo 00080000; | bc
                524288


                For normal human use I very much prefer bc, but when writing a program that generates code, especially from a parser of some sort, a stack-based tool like dc may be easier to deal with (and indeed the original version of bc was a front-end parser for dc).







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 1 hour ago









                Greg A. WoodsGreg A. Woods

                52248




                52248



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Unix & Linux Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f507044%2fhow-to-read-string-as-hex-number-in-bash%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    ValueError: Error when checking input: expected conv2d_13_input to have shape (3, 150, 150) but got array with shape (150, 150, 3)2019 Community Moderator ElectionError when checking : expected dense_1_input to have shape (None, 5) but got array with shape (200, 1)Error 'Expected 2D array, got 1D array instead:'ValueError: Error when checking input: expected lstm_41_input to have 3 dimensions, but got array with shape (40000,100)ValueError: Error when checking target: expected dense_1 to have shape (7,) but got array with shape (1,)ValueError: Error when checking target: expected dense_2 to have shape (1,) but got array with shape (0,)Keras exception: ValueError: Error when checking input: expected conv2d_1_input to have shape (150, 150, 3) but got array with shape (256, 256, 3)Steps taking too long to completewhen checking input: expected dense_1_input to have shape (13328,) but got array with shape (317,)ValueError: Error when checking target: expected dense_3 to have shape (None, 1) but got array with shape (7715, 40000)Keras exception: Error when checking input: expected dense_input to have shape (2,) but got array with shape (1,)

                    Ружовы пелікан Змест Знешні выгляд | Пашырэнне | Асаблівасці біялогіі | Літаратура | НавігацыяДагледжаная версіяправерана1 зменаДагледжаная версіяправерана1 змена/ 22697590 Сістэматыкана ВіківідахВыявына Вікісховішчы174693363011049382

                    Illegal assignment from SObject to ContactFetching String, Id from Map - Illegal Assignment Id to Field / ObjectError: Compile Error: Illegal assignment from String to BooleanError: List has no rows for assignment to SObjectError on Test Class - System.QueryException: List has no rows for assignment to SObjectRemote action problemDML requires SObject or SObject list type error“Illegal assignment from List to List”Test Class Fail: Batch Class: System.QueryException: List has no rows for assignment to SObjectMapping to a user'List has no rows for assignment to SObject' Mystery