473,387 Members | 1,486 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

How to Convert Byte Array to Int32 (Big-endian)

I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles
Nov 21 '05 #1
14 29651
Charles,

We have a long time not seen you, so welcome back,

Maybe a crazy idea for you, however multiplying and adding?

Cor
Nov 21 '05 #2
"Charles Law" <bl***@nowhere.com> schrieb:
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?


You may want to reverse the byte array before using 'BitConverter'.

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
Nov 21 '05 #3
Hi Cor

I haven't really been away, just a bit quiet. I did respond to someone the
other day about a serial comms issue crashing their prog, but no word yet
whether it fixed the problem.
Maybe a crazy idea for you, however multiplying and adding?
Yes, that is currently what I do, or rather what the VB6 code that I am
converting does. I was just looking for a native .NET way to do it. It seems
to me that there should be a switch, or extra parameter to pass that allows
one to specify big or little-endianness, but I haven't spotted it.

Charles
"Cor Ligthert" <no************@planet.nl> wrote in message
news:%2****************@TK2MSFTNGP09.phx.gbl... Charles,

We have a long time not seen you, so welcome back,

Maybe a crazy idea for you, however multiplying and adding?

Cor

Nov 21 '05 #4
Hi Herfried

As I have just replied to Cor, I kind of expected a switch somewhere to
allow me to specify the endianness of the operation, but it seems to be
fixed.

I had toyed with reversing the bytes, but then I might just as well stick to
carving the array up by hand. Besides, it makes it a two-stage process, so
to avoid duplication I would need a function wrapper.

Perhaps I am just being picky, but I like to use built-in stuff wherever
possible; or maybe it's laziness ;-)

Charles
"Herfried K. Wagner [MVP]" <hi***************@gmx.at> wrote in message
news:uU**************@TK2MSFTNGP14.phx.gbl...
"Charles Law" <bl***@nowhere.com> schrieb:
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?


You may want to reverse the byte array before using 'BitConverter'.

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Nov 21 '05 #5
Charles,
Jon Skeet has a EndianBitConverter at
http://www.yoda.arachsys.com/csharp/miscutil/ that works similar to
BitConverter but either Little-Endian or Big-Endian depending on which you
pick...

Its in C#, however you should be able to use directly as a class assembly,
or easily converted to VB.NET as the source is available...

Hope this helps
Jay

"Charles Law" <bl***@nowhere.com> wrote in message
news:OD**************@TK2MSFTNGP11.phx.gbl...
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles

Nov 21 '05 #6
Here's a couple of functions that I use...probably a better way to do it but
it works:

Friend Function ConvIntegertoByteArray(ByVal n As Long, ByVal lg As
Integer) As Byte()
'converts an integer to a byte array of length lg
Dim m() As Byte = New Byte(lg - 1) {}
Dim i, k As Integer
Dim h As String
h = Hex(n).PadLeft(16, "0"c)
k = 16
For i = lg - 1 To 0 Step -1
k = k - 2
m(i) = CByte("&H" & h.Substring(k, 2))
Next
Return m
End Function

Public Function ConvByteArraytoInteger(ByVal b As Byte(), Optional ByVal
ln As Integer = 0, Optional ByVal sidx As Integer = 0) As Long
Dim i As Integer
Dim j, k As Long
If ln = 0 Then ln = UBound(b) + 1
ln = sidx + ln - 1
k = 1
j = CInt(b(ln))
For i = ln - 1 To sidx Step -1
k = 256 * k
j = j + k * b(i)
Next
Return j
End Function

"Charles Law" wrote:
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles

Nov 21 '05 #7
Hi Dennis

Thanks for the reply. As I said in a couple of other replies, it is not so
much the ability to manipulate the data by hand that eludes me, but the
native .NET way, if any. I suppose I am jut trying to avoid re-inventing the
wheel if, indeed, such a wheel exists.

Charles
"Dennis" <De****@discussions.microsoft.com> wrote in message
news:AA**********************************@microsof t.com...
Here's a couple of functions that I use...probably a better way to do it
but
it works:

Friend Function ConvIntegertoByteArray(ByVal n As Long, ByVal lg As
Integer) As Byte()
'converts an integer to a byte array of length lg
Dim m() As Byte = New Byte(lg - 1) {}
Dim i, k As Integer
Dim h As String
h = Hex(n).PadLeft(16, "0"c)
k = 16
For i = lg - 1 To 0 Step -1
k = k - 2
m(i) = CByte("&H" & h.Substring(k, 2))
Next
Return m
End Function

Public Function ConvByteArraytoInteger(ByVal b As Byte(), Optional
ByVal
ln As Integer = 0, Optional ByVal sidx As Integer = 0) As Long
Dim i As Integer
Dim j, k As Long
If ln = 0 Then ln = UBound(b) + 1
ln = sidx + ln - 1
k = 1
j = CInt(b(ln))
For i = ln - 1 To sidx Step -1
k = 256 * k
j = j + k * b(i)
Next
Return j
End Function

"Charles Law" wrote:
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles

Nov 21 '05 #8
Hi Jay

Thanks for the link. I have had a look and I see that Jon uses, in essence,
the same approach that I have at present. I guess that is also how the .NET
little endian BitConverter method is coded under the covers, so it seems
that my best bet is just to wrap the functions I have a bit better and leave
it at that.

Cheers.

Charles
"Jay B. Harlow [MVP - Outlook]" <Ja************@msn.com> wrote in message
news:O3**************@TK2MSFTNGP15.phx.gbl...
Charles,
Jon Skeet has a EndianBitConverter at
http://www.yoda.arachsys.com/csharp/miscutil/ that works similar to
BitConverter but either Little-Endian or Big-Endian depending on which you
pick...

Its in C#, however you should be able to use directly as a class assembly,
or easily converted to VB.NET as the source is available...

Hope this helps
Jay

"Charles Law" <bl***@nowhere.com> wrote in message
news:OD**************@TK2MSFTNGP11.phx.gbl...
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles


Nov 21 '05 #9
Charles,
I would expect yours & Jon's approach to be very similar.

My point is that Jon has done all the "leg work" & created "complete"
versions of the classes. In other words Why reinvent the wheel?

Hope this helps
Jay

"Charles Law" <bl***@nowhere.com> wrote in message
news:%2****************@TK2MSFTNGP10.phx.gbl...
Hi Jay

Thanks for the link. I have had a look and I see that Jon uses, in
essence, the same approach that I have at present. I guess that is also
how the .NET little endian BitConverter method is coded under the covers,
so it seems that my best bet is just to wrap the functions I have a bit
better and leave it at that.

Cheers.

Charles
"Jay B. Harlow [MVP - Outlook]" <Ja************@msn.com> wrote in message
news:O3**************@TK2MSFTNGP15.phx.gbl...
Charles,
Jon Skeet has a EndianBitConverter at
http://www.yoda.arachsys.com/csharp/miscutil/ that works similar to
BitConverter but either Little-Endian or Big-Endian depending on which
you pick...

Its in C#, however you should be able to use directly as a class
assembly, or easily converted to VB.NET as the source is available...

Hope this helps
Jay

"Charles Law" <bl***@nowhere.com> wrote in message
news:OD**************@TK2MSFTNGP11.phx.gbl...
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles



Nov 21 '05 #10
Indeed. Fair point.

Thanks.

Charles
"Jay B. Harlow [MVP - Outlook]" <Ja************@msn.com> wrote in message
news:uz**************@TK2MSFTNGP09.phx.gbl...
Charles,
I would expect yours & Jon's approach to be very similar.

My point is that Jon has done all the "leg work" & created "complete"
versions of the classes. In other words Why reinvent the wheel?

Hope this helps
Jay

"Charles Law" <bl***@nowhere.com> wrote in message
news:%2****************@TK2MSFTNGP10.phx.gbl...
Hi Jay

Thanks for the link. I have had a look and I see that Jon uses, in
essence, the same approach that I have at present. I guess that is also
how the .NET little endian BitConverter method is coded under the covers,
so it seems that my best bet is just to wrap the functions I have a bit
better and leave it at that.

Cheers.

Charles
"Jay B. Harlow [MVP - Outlook]" <Ja************@msn.com> wrote in message
news:O3**************@TK2MSFTNGP15.phx.gbl...
Charles,
Jon Skeet has a EndianBitConverter at
http://www.yoda.arachsys.com/csharp/miscutil/ that works similar to
BitConverter but either Little-Endian or Big-Endian depending on which
you pick...

Its in C#, however you should be able to use directly as a class
assembly, or easily converted to VB.NET as the source is available...

Hope this helps
Jay

"Charles Law" <bl***@nowhere.com> wrote in message
news:OD**************@TK2MSFTNGP11.phx.gbl...
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles



Nov 21 '05 #11

"Charles Law" <bl***@nowhere.com> wrote in message
news:OD**************@TK2MSFTNGP11.phx.gbl...
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles


You could try something like this:

Private Function Int32FromByteArray(ByVal BA() As Byte, ByVal
SwitchEndian As Boolean) As Integer
Dim outVal As Integer

outVal = BitConverter.ToInt32(BA, 0)
If SwitchEndian = True Then
outVal = System.Net.IPAddress.NetworkToHostOrder(outVal)
End If
Return outVal
End Function

NetworkToHostOrder - Big To Little Endian
HostToNetworkOrder - Little To Big Endian
Although in this case it makes no difference which one you choose as the end
result is the same.

Gerald
Nov 21 '05 #12
Gerald,
Thanks, I was looking for NetworkToHostOrder & HostToNetworkOrder, when
Charles first asked, I just didn't remember which System.Net class they were
on. I was thinking Socket or something else...

Jay

"Gerald Hernandez" <Cablewizard@sp*********@Yahoo.com> wrote in message
news:%2****************@TK2MSFTNGP15.phx.gbl...

"Charles Law" <bl***@nowhere.com> wrote in message
news:OD**************@TK2MSFTNGP11.phx.gbl...
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles


You could try something like this:

Private Function Int32FromByteArray(ByVal BA() As Byte, ByVal
SwitchEndian As Boolean) As Integer
Dim outVal As Integer

outVal = BitConverter.ToInt32(BA, 0)
If SwitchEndian = True Then
outVal = System.Net.IPAddress.NetworkToHostOrder(outVal)
End If
Return outVal
End Function

NetworkToHostOrder - Big To Little Endian
HostToNetworkOrder - Little To Big Endian
Although in this case it makes no difference which one you choose as the
end
result is the same.

Gerald

Nov 21 '05 #13
Yeah, it is buried pretty deep. It also seems they have some sort of
aversion to using the word Endian, so it makes it very difficult to find.

Gerald

"Jay B. Harlow [MVP - Outlook]" <Ja************@msn.com> wrote in message
news:e$**************@tk2msftngp13.phx.gbl...
Gerald,
Thanks, I was looking for NetworkToHostOrder & HostToNetworkOrder, when
Charles first asked, I just didn't remember which System.Net class they were on. I was thinking Socket or something else...

Jay

"Gerald Hernandez" <Cablewizard@sp*********@Yahoo.com> wrote in message
news:%2****************@TK2MSFTNGP15.phx.gbl...

"Charles Law" <bl***@nowhere.com> wrote in message
news:OD**************@TK2MSFTNGP11.phx.gbl...
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles


You could try something like this:

Private Function Int32FromByteArray(ByVal BA() As Byte, ByVal
SwitchEndian As Boolean) As Integer
Dim outVal As Integer

outVal = BitConverter.ToInt32(BA, 0)
If SwitchEndian = True Then
outVal = System.Net.IPAddress.NetworkToHostOrder(outVal)
End If
Return outVal
End Function

NetworkToHostOrder - Big To Little Endian
HostToNetworkOrder - Little To Big Endian
Although in this case it makes no difference which one you choose as the
end
result is the same.

Gerald


Nov 21 '05 #14
Hi Gerald

That's just the ticket. Thanks.

Charles
"Gerald Hernandez" <Cablewizard@sp*********@Yahoo.com> wrote in message
news:%2****************@TK2MSFTNGP15.phx.gbl...

"Charles Law" <bl***@nowhere.com> wrote in message
news:OD**************@TK2MSFTNGP11.phx.gbl...
I thought this had come up before, but I now cannot find it.

I have a byte array, such as

Dim a() As Byte = {1, 2, 3, 4}

I want to convert this to an Int32 = 01020304 (hex).

If I use BitConverter, I get 04030201.

Is there a built-in way to do this, or am I stuck with extracting and
shifting each byte manually?

TIA

Charles


You could try something like this:

Private Function Int32FromByteArray(ByVal BA() As Byte, ByVal
SwitchEndian As Boolean) As Integer
Dim outVal As Integer

outVal = BitConverter.ToInt32(BA, 0)
If SwitchEndian = True Then
outVal = System.Net.IPAddress.NetworkToHostOrder(outVal)
End If
Return outVal
End Function

NetworkToHostOrder - Big To Little Endian
HostToNetworkOrder - Little To Big Endian
Although in this case it makes no difference which one you choose as the
end
result is the same.

Gerald

Nov 21 '05 #15

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
by: Gator | last post by:
Hi All, Basically my situation is this, I have a server implemented in C++, unmanaged code, using proprietery protocol over TCP/IP to communicate with the cilent(c++ also). Now, I am implementing...
5
by: Andrew Inwards | last post by:
Can anyone tell me how to convert a byte array to a stream.? Thanks Andrew
4
by: Dan | last post by:
I need to convert a byte array to a string in order to upload a binary file with an httpWebRequest. What's the most efficient way to do such a conversion?
2
by: Dave | last post by:
Hi, I'm trying to convert a byte array to string --This works... System.BitConverter.ToString(bytes) "EB-55-79-20-18-B2-76-4D-85-0A-93-6B-97-33-31-B8" --This doesn't, but returns...
5
by: Terry Olsen | last post by:
Looking for info on how to convert a byte array to a string, and string to byte array. Thanks.
0
by: Sergei Shelukhin | last post by:
Hi. I receive a byte array that contains utf-16 string (with a lot of \0 characters :)) from a legacy system that holds some data that is changed elsewhere. How do I convert it to an actual utf-16...
18
by: MrVS | last post by:
Hi, I have a C++ CLR class method that takes System::Byte *b as parameter argument. I want the CSharp caller pass a byte * to this function. But in the CSharp prorgram, I only managed to create a...
1
by: Chintan Shah | last post by:
I have a byte array which looks something like 01 00 02 00 73 45 69 A5 So i have to read first 2 bytes and convert it into integer to get its value. Same for next 2 bytes and then next 4...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.