how do you convert form byte[4] to Int32 while retaining the binary
value of the byte array 19 4003 je**@foundrymusic.com wrote: how do you convert form byte[4] to Int32 while retaining the binary value of the byte array
First of all, you have to be a bit more specific. For example, you need
to say that your 'byte' has only 8 bits and your Int32 is (probably) 32
bits long. Second, what does "binary value" mean? Is your 'byte' type
signed or unsigned? Third, what do you mean by "convert"? An array of
four chars (signed or unsigned) cannot be _converted_ to a single int in
C++ sense, so you probably mean "how to form a 32-bit value out of 4 8-bit
values and retain the bit pattern of each of 4 source values?" That can
be answered but you need to specify where your 'byte[0]' should go, to the
beginning or to the end of the resulting integer.
See what I mean? Perhaps while trying to understand what you need, you
will find a decent way to "convert" what you need into what you desire
using << and | operators...
What are you trying to accomplish, anyway?
V
<je**@foundrymusic.com> wrote in message
news:11*********************@f14g2000cwb.googlegro ups.com... how do you convert form byte[4] to Int32 while retaining the binary value of the byte array
As far as I know, neither "Int32" nor "byte" are defined as types in C++. I
can *guess* how they're defined, but it's only an eductated guess. What do
you mean when you say you want to "retain the binary value"? And in what
way do you want to "convert" the value?
If what you have is an array of 4 8-bit unsigned char values, and you want
to interpret them as a 32-bit signed long, then one way might be to use a
pointer, like this:
unsigned char array[4];
//.. fill that array somehow...
long* pInt32 = (long*)(&array[0]);
Now, *pInt32 will be interpreted as a signed long.
BUT!!! This may not work on your machine! For one thing, the byte ordering
of the bytes in the array may not be correct for an integer representation
on your machine. On a PC, the ordering of bytes is opposite what it is on
the Mac, for example. It all depends upon you KNOWING that the values in
that array are in the correct order in the first place.
(On the other hand, if you know that they're in the OPPOSITE order, you can
always copy them to another array in reverse order, and then do the above!)
There may be other issues, possibly, such as the size of a char and a long
on your machine, and the possibility that you could put some bit pattern
into that array which would not be a valid 32-bit long integer.
In general, it's best to avoid doing this if possible. But, you can try it
and see if it works for you. Remember, though, that the solution likely
won't be portable across machines.
-Howard
Howard wrote: <je**@foundrymusic.com> wrote in message news:11*********************@f14g2000cwb.googlegro ups.com...
how do you convert form byte[4] to Int32 while retaining the binary value of the byte array
As far as I know, neither "Int32" nor "byte" are defined as types in C++. I can *guess* how they're defined, but it's only an eductated guess. What do you mean when you say you want to "retain the binary value"? And in what way do you want to "convert" the value?
If what you have is an array of 4 8-bit unsigned char values, and you want to interpret them as a 32-bit signed long, then one way might be to use a pointer, like this:
<snip..>
Int32 convert(Byte b[4])
{
return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3]);
}
Byte b[4] = { 1, 2, 3, 4 };
Int32 i = convert(b);
Let's not get _that_ picky, people.
Jonathan
Jonathan Mcdougall wrote: Howard wrote:
<je**@foundrymusic.com> wrote in message news:11*********************@f14g2000cwb.googlegro ups.com...
how do you convert form byte[4] to Int32 while retaining the binary value of the byte array
As far as I know, neither "Int32" nor "byte" are defined as types in C++. I can *guess* how they're defined, but it's only an eductated guess. What do you mean when you say you want to "retain the binary value"? And in what way do you want to "convert" the value?
If what you have is an array of 4 8-bit unsigned char values, and you want to interpret them as a 32-bit signed long, then one way might be to use a pointer, like this:
<snip..>
Int32 convert(Byte b[4]) { return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3]); }
Byte b[4] = { 1, 2, 3, 4 };
Int32 i = convert(b);
Let's not get _that_ picky, people.
How did you know the OP didn't want
return (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | (b[0]);
???
V
<je**@foundrymusic.com> wrote in message news:11*********************@f14g2000cwb.googlegro ups.com... how do you convert form byte[4] to Int32 while retaining the binary value of the byte array
Your question has nothing to do with C++.
(hint: experiment with a union of these two types)
"Jonathan Mcdougall" <jo***************@DELyahoo.ca> wrote in message
news:o0********************@weber.videotron.net... Howard wrote: <je**@foundrymusic.com> wrote in message news:11*********************@f14g2000cwb.googlegro ups.com...
how do you convert form byte[4] to Int32 while retaining the binary value of the byte array
As far as I know, neither "Int32" nor "byte" are defined as types in C++. I can *guess* how they're defined, but it's only an eductated guess. What do you mean when you say you want to "retain the binary value"? And in what way do you want to "convert" the value?
If what you have is an array of 4 8-bit unsigned char values, and you want to interpret them as a 32-bit signed long, then one way might be to use a pointer, like this:
<snip..>
Int32 convert(Byte b[4]) { return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3]); }
Byte b[4] = { 1, 2, 3, 4 };
Int32 i = convert(b);
Let's not get _that_ picky, people.
How do you know that the byte ordering is correct? Maybe b[0] is the LSB!
(And of course you're just assuming the types match. Logical assumption,
but not explicitly stated.)
-Howard
Alan wrote: <je**@foundrymusic.com> wrote in message news:11*********************@f14g2000cwb.googlegro ups.com...
how do you convert form byte[4] to Int32 while retaining the binary value of the byte array
Your question has nothing to do with C++. (hint: experiment with a union of these two types)
What's a 'union' outside of C++ context? You are contradicting yourself.
If the OP has to look at the union, the question has _everything_ to do
with C++.
Besides, unions are not for conversions between types. They are only to
save memory when storing different types. See more discussions on that
in all known C++ newsgroups.
V
"Victor Bazarov" <v.********@comAcast.net> wrote in message news:Cf*****************@newsread1.dllstx09.us.to. verio.net... Alan wrote: <je**@foundrymusic.com> wrote in message news:11*********************@f14g2000cwb.googlegro ups.com...
how do you convert form byte[4] to Int32 while retaining the binary value of the byte array
Your question has nothing to do with C++. (hint: experiment with a union of these two types)
What's a 'union' outside of C++ context? You are contradicting yourself.
Hardly, they are also used in other languages (as you know), e.g. C
If the OP has to look at the union, the question has _everything_ to do with C++.
see above
Besides, unions are not for conversions between types.
...but they can be used for that in C
"Alan" <al**@surfbest.net> wrote in message
news:10*************@news.supernews.com... "Victor Bazarov" <v.********@comAcast.net> wrote in message news:Cf*****************@newsread1.dllstx09.us.to. verio.net... Alan wrote: > <je**@foundrymusic.com> wrote in message > news:11*********************@f14g2000cwb.googlegro ups.com... > >>how do you convert form byte[4] to Int32 while retaining the binary >>value of the byte array > > > Your question has nothing to do with C++. > (hint: experiment with a union of these two types)
What's a 'union' outside of C++ context? You are contradicting yourself.
Hardly, they are also used in other languages (as you know), e.g. C
If the OP has to look at the union, the question has _everything_ to do with C++.
see above
Besides, unions are not for conversions between types.
..but they can be used for that in C
The OP asked about doing something in C++ (assumed, since that's where he
posted). You answered in two parts. First, you said his question had
"nothing" to do with C++. Victor rightly asks "why?". In what way does a
question about how to accomplish a common task not a question about how to
accomplish that task in C++, given that that's what we discuss here? Then,
you suggest that somehow the ability to use a union construct to accomplish
the task should be a hint to him. We can only assume that you mean it
should be a hint that the original question has nothing to do with C++. Yet
the union construct does exist in C+, so in what way does it hint that the
OP's question is not about C++? You're suggesting one way to do what he
wants to do (albeit not a good way, IMO), with a construct that is available
in C++, yet saying that this somehow demonstrates that the question you're
proposing an answer to is therefore NOT related to C++. Are you as confused
as I am yet? :-)
-Howard
Victor Bazarov wrote: Jonathan Mcdougall wrote: Int32 convert(Byte b[4]) { return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3]); }
Byte b[4] = { 1, 2, 3, 4 };
Int32 i = convert(b);
Let's not get _that_ picky, people.
How did you know the OP didn't want
return (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | (b[0]);
I don't, but I think my answer (and the one you just gave) helped the OP
quite more than "First of all, you have to be a bit more specific."
But I may be wrong.
Jonathan
Jonathan Mcdougall wrote: Victor Bazarov wrote:
Jonathan Mcdougall wrote:
Int32 convert(Byte b[4]) { return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3]); }
Byte b[4] = { 1, 2, 3, 4 };
Int32 i = convert(b);
Let's not get _that_ picky, people. How did you know the OP didn't want
return (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | (b[0]);
I don't, but I think my answer (and the one you just gave) helped the OP quite more than "First of all, you have to be a bit more specific."
But I may be wrong.
You may be. Only the OP can say.
V
"Alan" <al**@surfbest.net> skrev i en meddelelse
news:10*************@news.supernews.com... "Victor Bazarov" <v.********@comAcast.net> wrote in message news:Cf*****************@newsread1.dllstx09.us.to. verio.net... Alan wrote: > <je**@foundrymusic.com> wrote in message > news:11*********************@f14g2000cwb.googlegro ups.com... > >>how do you convert form byte[4] to Int32 while retaining the binary >>value of the byte array > > > Your question has nothing to do with C++. > (hint: experiment with a union of these two types) What's a 'union' outside of C++ context? You are contradicting yourself.
Hardly, they are also used in other languages (as you know), e.g. C
If the OP has to look at the union, the question has _everything_ to do with C++.
see above
Besides, unions are not for conversions between types.
..but they can be used for that in C
But not portably in C++.
union converter
{
byte b[4];
int32 i;
};
....
converter bomb;
bomb.b[0] = ...;
....
bomb.b[3] = ...;
int32 blow = bomb.i;
The last statement causes undefined behaviour.
"Howard" <al*****@hotmail.com> skrev i en meddelelse
news:yJ******************@bgtnsc05-news.ops.worldnet.att.net... <je**@foundrymusic.com> wrote in message news:11*********************@f14g2000cwb.googlegro ups.com... how do you convert form byte[4] to Int32 while retaining the binary value of the byte array
As far as I know, neither "Int32" nor "byte" are defined as types in C++. I can *guess* how they're defined, but it's only an eductated guess. What do you mean when you say you want to "retain the binary value"? And in what way do you want to "convert" the value?
If what you have is an array of 4 8-bit unsigned char values, and you want to interpret them as a 32-bit signed long, then one way might be to use a pointer, like this:
unsigned char array[4]; //.. fill that array somehow...
long* pInt32 = (long*)(&array[0]);
Now, *pInt32 will be interpreted as a signed long.
BUT!!! This may not work on your machine! For one thing, the byte ordering of the bytes in the array may not be correct for an integer representation on your machine. On a PC, the ordering of bytes is opposite what it is on the Mac, for example. It all depends upon you KNOWING that the values in that array are in the correct order in the first place.
(On the other hand, if you know that they're in the OPPOSITE order, you can always copy them to another array in reverse order, and then do the above!)
There may be other issues, possibly, such as the size of a char and a long on your machine, and the possibility that you could put some bit pattern into that array which would not be a valid 32-bit long integer.
In general, it's best to avoid doing this if possible. But, you can try it and see if it works for you. Remember, though, that the solution likely won't be portable across machines.
-Howard
Also the above code gives undefined behaviour (alignment issues)
/Peter je**@foundrymusic.com wrote: how do you convert form byte[4] to Int32 while retaining the binary value of the byte array
Off topic in here.
Now if you are talking about CLI/.NET, that is you are talking about
System::Int32 (which maps to int and long anyway), System::Byte (which
maps to unsigned char and can also map to char), you can't cast it from
one type to another.
What you can do is to copy each value to a new array of the preferred type.
--
Ioannis Vranos http://www23.brinkster.com/noicys
Victor Bazarov wrote: Jonathan Mcdougall wrote:
Victor Bazarov wrote:
Jonathan Mcdougall wrote:
Int32 convert(Byte b[4]) { return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3]); }
Byte b[4] = { 1, 2, 3, 4 };
Int32 i = convert(b);
Let's not get _that_ picky, people. How did you know the OP didn't want
return (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | (b[0]);
I don't, but I think my answer (and the one you just gave) helped the OP quite more than "First of all, you have to be a bit more specific."
But I may be wrong.
You may be. Only the OP can say.
And he don't seem to care very much.
By the way, I said that more as a joke, I didn't mean to offense anyone.
Happy holidays anyways.
Jonathan
"Howard" <al*****@hotmail.com> wrote in message news:dY*******************@bgtnsc05-news.ops.worldnet.att.net... "Alan" <al**@surfbest.net> wrote in message news:10*************@news.supernews.com... "Victor Bazarov" <v.********@comAcast.net> wrote in message news:Cf*****************@newsread1.dllstx09.us.to. verio.net... Alan wrote: > <je**@foundrymusic.com> wrote in message > news:11*********************@f14g2000cwb.googlegro ups.com... > >>how do you convert form byte[4] to Int32 while retaining the binary >>value of the byte array > > > Your question has nothing to do with C++. > (hint: experiment with a union of these two types)
What's a 'union' outside of C++ context? You are contradicting yourself.
Hardly, they are also used in other languages (as you know), e.g. C
If the OP has to look at the union, the question has _everything_ to do with C++.
see above
Besides, unions are not for conversions between types.
..but they can be used for that in C
The OP asked about doing something in C++ (assumed, since that's where he posted). You answered in two parts. First, you said his question had "nothing" to do with C++. Victor rightly asks "why?". In what way does a question about how to accomplish a common task not a question about how to accomplish that task in C++, given that that's what we discuss here? Then, you suggest that somehow the ability to use a union construct to accomplish the task should be a hint to him. We can only assume that you mean it should be a hint that the original question has nothing to do with C++. Yet the union construct does exist in C+, so in what way does it hint that the OP's question is not about C++? You're suggesting one way to do what he wants to do (albeit not a good way, IMO), with a construct that is available in C++, yet saying that this somehow demonstrates that the question you're proposing an answer to is therefore NOT related to C++. Are you as confused as I am yet? :-)
Howard, you're certainly confused but it is more the mysterious wandering
of you mind than anything that I wrote. It's unfortunate that these personal
attacks have apparently kept the op away, and that we'll probably never know
what he was trying to do.
My "hint" of using a union, was just a suggestion not a solution. He could load
a 32-bit value into such a union and examine the byte array. Maybe it would
tell him what he wants to know. To assume that that the op, Jeff, was seeking
a C++ solution is an assumption on your part, as many people post here with
questions quite unrelated to C++, as you well know.
Jeff, just in case you're reading this, try using a union. If you wanted a solution
in a C++ context let me apologise for the "Your question has nothing to do
with C++."
-Alan
Alan wrote: My "hint" of using a union, was just a suggestion not a solution.
That was a bad suggestion.
He could load a 32-bit value into such a union and examine the byte array.
That's not portable. There are other ways to do that.
Maybe it would tell him what he wants to know. To assume that that the op, Jeff, was seeking a C++ solution is an assumption on your part, as many people post here with questions quite unrelated to C++, as you well know.
The thing is, that's a c++ newsgroup. We therefore assume the language
is C++.
Jeff, just in case you're reading this, try using a union.
No! Please, read about the problems associated with this method.
Jonathan
"Jonathan Mcdougall" <jo***************@DELyahoo.ca> wrote in message news:k9********************@weber.videotron.net... Alan wrote: My "hint" of using a union, was just a suggestion not a solution.
That was a bad suggestion.
> He could load a 32-bit value into such a union and examine the byte array.
That's not portable. There are other ways to do that.
> Maybe it would tell him what he wants to know. To assume that that the op, Jeff, was seeking a C++ solution is an assumption on your part, as many people post here with questions quite unrelated to C++, as you well know.
The thing is, that's a c++ newsgroup. We therefore assume the language is C++.
Jeff, just in case you're reading this, try using a union.
No! Please, read about the problems associated with this method.
No problems here, it seems:
#include <iostream>
using namespace std;
typedef unsigned char byte;
typedef unsigned long int32;
union converter {
byte b[4];
int32 i;
};
int main() {
converter c;
c.b[3] = (byte) 0x12;
c.b[2] = (byte) 0x34;
c.b[1] = (byte) 0x56;
c.b[0] = (byte) 0x78;
int32 r = c.i;
cout << "r = 0x" << hex << r << endl;
cout << "b = 0x" << hex << (int32)c.b[3]
<< (int32)c.b[2]
<< (int32)c.b[1]
<< (int32)c.b[0] << endl;
return 0;
}
// results
// r = 0x12345678
// b = 0x12345678 This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Swarup |
last post by:
I am reading a file (txt, xml, gif, ico, bmp etc) byte by byte and filling
it into a byte arry. Now i have to convert it into a string to store it in
the database.
I use...
|
by: Pablo Gutierrez |
last post by:
I have a C# method that reads Binary data (BLOB type) from a database
and returns the data an array of bytes
(i.e byte outbyte = new byte;).
The BLOB column is saved into the database by a C...
|
by: Julia |
last post by:
Hi,
I need to convert unicode string to ansi string
Thanks in adavance.
|
by: Angel Filev |
last post by:
Hi everyone,
I am trying to store a file as a binary array in an "image" field in SQL
Server 2000 database.
It works OK except for the ".PDF" files, which I believe get corrupted in
the
process...
|
by: twawsico |
last post by:
I have a piece of code that needs to read the contents of a binary file
(that I've created with another app) into an array of structures. The
binary data in the file represents just a series of...
|
by: Sam |
last post by:
Hi,
I'm trying to convert a string to a binary format (byte)
I've looked at BitConverter class, but I can't figure out how to use it
for a Strin.
Does anyone know ?
Thx
|
by: Me |
last post by:
Hi all
I am getting a really bizzare error on when I convert a string into a
datetime:
The code is :
DateTime dt1 = Convert.ToDateTime("10 Sep 2005");
Console.WriteLine(dt1.Year);
|
by: cmdolcet69 |
last post by:
Public ArrList As New ArrayList
Public bitvalue As Byte()
Public Sub addvalues()
Dim index As Integer
ArrList.Add(100)
ArrList.Add(200)
ArrList.Add(300)
ArrList.Add(400)
ArrList.Add(500)
|
by: mehafi |
last post by:
hi,
I need to write a few integer numbers to file. A method write from
FileStream writes an array of bytes. So how to conwert my integers to
byte array?
I've tried Convert class, but it hasn't...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 2 August 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM)
The start time is equivalent to 19:00 (7PM) in Central...
|
by: erikbower65 |
last post by:
Using CodiumAI's pr-agent is simple and powerful. Follow these steps:
1. Install CodiumAI CLI: Ensure Node.js is installed, then run 'npm install -g codiumai' in the terminal.
2. Connect to...
|
by: erikbower65 |
last post by:
Here's a concise step-by-step guide for manually installing IntelliJ IDEA:
1. Download: Visit the official JetBrains website and download the IntelliJ IDEA Community or Ultimate edition based on...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Sept 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM)
The start time is equivalent to 19:00 (7PM) in Central...
|
by: Taofi |
last post by:
I try to insert a new record but the error message says the number of query names and destination fields are not the same
This are my field names
ID, Budgeted, Actual, Status and Differences
...
|
by: DJRhino1175 |
last post by:
When I run this code I get an error, its Run-time error# 424 Object required...This is my first attempt at doing something like this. I test the entire code and it worked until I added this -
If...
|
by: DJRhino |
last post by:
Private Sub CboDrawingID_BeforeUpdate(Cancel As Integer)
If = 310029923 Or 310030138 Or 310030152 Or 310030346 Or 310030348 Or _
310030356 Or 310030359 Or 310030362 Or...
|
by: lllomh |
last post by:
How does React native implement an English player?
|
by: Mushico |
last post by:
How to calculate date of retirement from date of birth
| |