How to convert Struct to array
-
Hi , How can I convert struct like this to array byte public struct Message { public byte id; public int value1; public int value2; public byte chkSum; } Not in this way : public void converter() { Message message; message.id = 1; message.value1 = int.MaxValue ; message.value2 = int.MaxValue ; message.chkSum = (byte)(message.id + message.value1 + message.value2) ; byte [] dataToSend = new byte [10]; dataToSend[0] = message.id ; byte [] dataToInsert = BitConverter.GetBytes (message.value1 ); Array.Copy(dataToInsert, 0, dataToSend, 1, dataToInsert.Length); dataToInsert = BitConverter.GetBytes(message.value1); Array.Copy(dataToInsert, 0, dataToSend, 5, dataToInsert.Length); dataToSend[9] = message.chkSum ; } thank you
-
Hi , How can I convert struct like this to array byte public struct Message { public byte id; public int value1; public int value2; public byte chkSum; } Not in this way : public void converter() { Message message; message.id = 1; message.value1 = int.MaxValue ; message.value2 = int.MaxValue ; message.chkSum = (byte)(message.id + message.value1 + message.value2) ; byte [] dataToSend = new byte [10]; dataToSend[0] = message.id ; byte [] dataToInsert = BitConverter.GetBytes (message.value1 ); Array.Copy(dataToInsert, 0, dataToSend, 1, dataToInsert.Length); dataToInsert = BitConverter.GetBytes(message.value1); Array.Copy(dataToInsert, 0, dataToSend, 5, dataToInsert.Length); dataToSend[9] = message.chkSum ; } thank you
Perhaps one way is to use a pointer ? You can set up a struct so that you specify how the bytes are laid out.
Christian Graus - Microsoft MVP - C++ "I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
-
Hi , How can I convert struct like this to array byte public struct Message { public byte id; public int value1; public int value2; public byte chkSum; } Not in this way : public void converter() { Message message; message.id = 1; message.value1 = int.MaxValue ; message.value2 = int.MaxValue ; message.chkSum = (byte)(message.id + message.value1 + message.value2) ; byte [] dataToSend = new byte [10]; dataToSend[0] = message.id ; byte [] dataToInsert = BitConverter.GetBytes (message.value1 ); Array.Copy(dataToInsert, 0, dataToSend, 1, dataToInsert.Length); dataToInsert = BitConverter.GetBytes(message.value1); Array.Copy(dataToInsert, 0, dataToSend, 5, dataToInsert.Length); dataToSend[9] = message.chkSum ; } thank you
-
Hi , How can I convert struct like this to array byte public struct Message { public byte id; public int value1; public int value2; public byte chkSum; } Not in this way : public void converter() { Message message; message.id = 1; message.value1 = int.MaxValue ; message.value2 = int.MaxValue ; message.chkSum = (byte)(message.id + message.value1 + message.value2) ; byte [] dataToSend = new byte [10]; dataToSend[0] = message.id ; byte [] dataToInsert = BitConverter.GetBytes (message.value1 ); Array.Copy(dataToInsert, 0, dataToSend, 1, dataToInsert.Length); dataToInsert = BitConverter.GetBytes(message.value1); Array.Copy(dataToInsert, 0, dataToSend, 5, dataToInsert.Length); dataToSend[9] = message.chkSum ; } thank you
using System;
using System.Runtime.InteropServices;namespace ConsoleApplication9
{
class Program
{
// make pack size of smallest element
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct Message
{
public byte id;
public int value1;
public int value2;
public byte chkSum;
}static unsafe void Main(string\[\] args) { Message m \= new Message(); int size \= sizeof(Message); byte\[\] output \= new byte\[size\]; byte\* p \=
-
Hi , How can I convert struct like this to array byte public struct Message { public byte id; public int value1; public int value2; public byte chkSum; } Not in this way : public void converter() { Message message; message.id = 1; message.value1 = int.MaxValue ; message.value2 = int.MaxValue ; message.chkSum = (byte)(message.id + message.value1 + message.value2) ; byte [] dataToSend = new byte [10]; dataToSend[0] = message.id ; byte [] dataToInsert = BitConverter.GetBytes (message.value1 ); Array.Copy(dataToInsert, 0, dataToSend, 1, dataToInsert.Length); dataToInsert = BitConverter.GetBytes(message.value1); Array.Copy(dataToInsert, 0, dataToSend, 5, dataToInsert.Length); dataToSend[9] = message.chkSum ; } thank you