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?
Is there such a thing as a proper verb, like a proper noun?
Omega? Krypton?
hook-length formula: "Fibonaccized"
Why did early computer designers eschew integers?
Players Circumventing the limitations of Wish
Spaces in which all closed sets are regular closed
How to get the last not-null value in an ordered column of a huge table?
Button value to be changed back to original value on timeout (form double submit)
L'Hospital rule involving addition
What happened in Rome, when the western empire "fell"?
Physiological effects of huge anime eyes
Does Germany produce more waste than the US?
What day is it again?
What was Carter Burke's job for "the company" in Aliens?
Strange use of "whether ... than ..." in official text
What steps are necessary to read a Modern SSD in Medieval Europe?
Scary film where a woman has vaginal teeth
Incomplete cube
"Eavesdropping" vs "Listen in on"
What CSS properties can the br tag have?
Do scriptures give a method to recognize a truly self-realized person/jivanmukta?
Inductor and Capacitor in Parallel
Can this note be analyzed as a non-chord tone?
Relevant Part for a Badminton Serve
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?
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
add a comment |
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
add a comment |
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
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
bash numeric-data hex expr
edited Mar 18 at 18:52
Jesse_b
14.3k23574
14.3k23574
asked Mar 18 at 18:12
DenisNovacDenisNovac
438
438
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
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)))"
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 question00080000
is after byte swap00000800
, 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
|
show 4 more comments
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
).
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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)))"
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 question00080000
is after byte swap00000800
, 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
|
show 4 more comments
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)))"
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 question00080000
is after byte swap00000800
, 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
|
show 4 more comments
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)))"
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)))"
answered Mar 18 at 18:49
Jesse_bJesse_b
14.3k23574
14.3k23574
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 question00080000
is after byte swap00000800
, 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
|
show 4 more comments
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 question00080000
is after byte swap00000800
, 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
|
show 4 more comments
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
).
add a comment |
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
).
add a comment |
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
).
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
).
answered Mar 18 at 23:19
Greg A. WoodsGreg A. Woods
55248
55248
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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