How to read string as hex number in bash? The Next CEO of Stack OverflowIn 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?

Does falling count as part of my movement?

Need help understanding a power circuit (caps and diodes)

What happened in Rome, when the western empire "fell"?

Is a distribution that is normal, but highly skewed considered Gaussian?

The exact meaning of 'Mom made me a sandwich'

Why does standard notation not preserve intervals (visually)

Can we say or write : "No, it'sn't"?

Is this "being" usage is essential?

A Man With a Stainless Steel Endoskeleton (like The Terminator) Fighting Cloaked Aliens Only He Can See

Rotate a column

What flight has the highest ratio of time difference to flight time?

Writing differences on a blackboard

I want to delete every two lines after 3rd lines in file contain very large number of lines :

Why is quantifier elimination desirable for a given theory?

Recycling old answers

What was the first Unix version to run on a microcomputer?

Newlines in BSD sed vs gsed

Can MTA send mail via a relay without being told so?

What is the purpose of the Evocation wizard's Potent Cantrip feature?

Circle x^2 + y^2 = n! doesn't hit any lattice points for any n except for 0, 1, 2 and 6 or does it?

What connection does MS Office have to Netscape Navigator?

Is it possible to replace duplicates of a character with one character using tr

Why is information "lost" when it got into a black hole?

Does increasing your ability score affect your main stat?



How to read string as hex number in bash?



The Next CEO of Stack OverflowIn 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?










6















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




























    6















    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


























      6












      6








      6








      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 Mar 18 at 18:52









      Jesse_b

      14.3k23573




      14.3k23573










      asked Mar 18 at 18:12









      DenisNovacDenisNovac

      438




      438




















          2 Answers
          2






          active

          oldest

          votes


















          8














          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
            Mar 18 at 18:53







          • 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
            Mar 18 at 18:55












          • 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
            Mar 18 at 19:01











          • @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
            Mar 18 at 19:07












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

            – DenisNovac
            Mar 18 at 19:12


















          5














          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









            8














            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
              Mar 18 at 18:53







            • 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
              Mar 18 at 18:55












            • 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
              Mar 18 at 19:01











            • @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
              Mar 18 at 19:07












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

              – DenisNovac
              Mar 18 at 19:12















            8














            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
              Mar 18 at 18:53







            • 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
              Mar 18 at 18:55












            • 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
              Mar 18 at 19:01











            • @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
              Mar 18 at 19:07












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

              – DenisNovac
              Mar 18 at 19:12













            8












            8








            8







            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 Mar 18 at 18:49









            Jesse_bJesse_b

            14.3k23573




            14.3k23573












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

              – DenisNovac
              Mar 18 at 18:53







            • 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
              Mar 18 at 18:55












            • 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
              Mar 18 at 19:01











            • @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
              Mar 18 at 19:07












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

              – DenisNovac
              Mar 18 at 19:12

















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

              – DenisNovac
              Mar 18 at 18:53







            • 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
              Mar 18 at 18:55












            • 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
              Mar 18 at 19:01











            • @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
              Mar 18 at 19:07












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

              – DenisNovac
              Mar 18 at 19:12
















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

            – DenisNovac
            Mar 18 at 18:53






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

            – DenisNovac
            Mar 18 at 18:53





            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
            Mar 18 at 18:55






            @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
            Mar 18 at 18:55














            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
            Mar 18 at 19:01





            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
            Mar 18 at 19:01













            @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
            Mar 18 at 19:07






            @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
            Mar 18 at 19:07














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

            – DenisNovac
            Mar 18 at 19:12





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

            – DenisNovac
            Mar 18 at 19:12













            5














            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



























              5














              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

























                5












                5








                5







                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 Mar 18 at 23:19









                Greg A. WoodsGreg A. Woods

                55248




                55248



























                    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

                    Identifying “long and narrow” polygons in with PostGISlength and width of polygonWhy postgis st_overlaps reports Qgis' “avoid intersections” generated polygon as overlapping with others?Adjusting polygons to boundary and filling holesDrawing polygons with fixed area?How to remove spikes in Polygons with PostGISDeleting sliver polygons after difference operation in QGIS?Snapping boundaries in PostGISSplit polygon into parts adding attributes based on underlying polygon in QGISSplitting overlap between polygons and assign to nearest polygon using PostGIS?Expanding polygons and clipping at midpoint?Removing Intersection of Buffers in Same Layers

                    Masuk log Menu navigasi

                    อาณาจักร (ชีววิทยา) ดูเพิ่ม อ้างอิง รายการเลือกการนำทาง10.1086/39456810.5962/bhl.title.447410.1126/science.163.3863.150576276010.1007/BF01796092408502"Phylogenetic structure of the prokaryotic domain: the primary kingdoms"10.1073/pnas.74.11.5088432104270744"Towards a natural system of organisms: proposal for the domains Archaea, Bacteria, and Eucarya"1990PNAS...87.4576W10.1073/pnas.87.12.4576541592112744PubMedJump the queueexpand by handPubMedJump the queueexpand by handPubMedJump the queueexpand by hand"A revised six-kingdom system of life"10.1111/j.1469-185X.1998.tb00030.x9809012"Only six kingdoms of life"10.1098/rspb.2004.2705169172415306349"Kingdoms Protozoa and Chromista and the eozoan root of the eukaryotic tree"10.1098/rsbl.2009.0948288006020031978เพิ่มข้อมูล