Solved

object to byte[] in c#

Posted on 2006-11-12
7
3,887 Views
Last Modified: 2008-01-09
Hi All!

I'm working with c# and would like to put an object type into a byte[].  I found some documentation on how to put a struct into a buffer and how to dynamically allocate memory to copy a void* to another void*, but not how to copy an object into a buffer.  I also looked at MemoryStream and BitConverter.  If anyone has any ideas, I'm more than happy to hear them!

Thanks!

choo_chu
0
Comment
Question by:choo_chu
  • 4
  • 2
7 Comments
 
LVL 18

Expert Comment

by:Ravi Singh
ID: 17925633
Hi, do you want to write the object out to disk and then later read it back in? I think your refering to serialization, this article gives a good explanation using the BinaryFormatter class:

http://www.codeproject.com/csharp/objserial.asp
0
 
LVL 1

Author Comment

by:choo_chu
ID: 17925920
I have looked at the BinaryFormatter, but I'm not looking for serialization because I don't need all the extra information that is needed to reproduce the class when it's deserialized.  I just need the data.  (Notice that sizeof() and the amount of bytes used to serialize and object aren't the same.)  In c++, what I'm looking for would be akin to memcpy().


Thanks!

choo_chu
0
 
LVL 7

Expert Comment

by:yotamsher
ID: 17925944
Hey choo_chu

what does your class look like?
I got the feeling, that it is more like a struct, can't you just write a ToByteArray and FromByteArray functions?
why do you need to memcpy? are you then transfering it somewhere?

the more details you give, the better answers you'll get

Yotam
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 1

Author Comment

by:choo_chu
ID: 17926073
Hi,

I won't know what the incoming object looks like, I will only know its size.  The constructor has the following definition:
            DBObject( object obj, int size )

The class DBObject is the class of objects that are in the nodes of a b-tree.  The class contains two data members, _size and _data.  The constructor will set values _size = size and _data = obj...I want to be able to copy obj into _data, which is a byte[].  The data in this object (_size and _data) will be written to file and later retrieved.  

Thanks!

choo_chu
0
 
LVL 7

Accepted Solution

by:
yotamsher earned 500 total points
ID: 17926226
Hey choo_chu
my gfeeling, is that you should be going in the direction of serialization, as offered by  Zephyr__
  )-:
but look at this article
    http://www.codeguru.com/csharp/csharp/cs_syntax/reflection/article.php/c5885/
it might give you a hint to a different road:

Yotam
0
 
LVL 1

Author Comment

by:choo_chu
ID: 17926357
Thanks for the article Yotam...I think that will help a lot.  I'll keep you posted.

choo_chu
0
 
LVL 1

Author Comment

by:choo_chu
ID: 17926854
Ok, I figured out how to do what I want using reflection...it's actually kinda neat ;)  This isn't all the code, but is the jist of what I did.  I got the field type, and I stuff the values into the byte[] using BitConverter.GetBytes().  When I get to the byte[] type, I just use the GetValue() supplied by the FieldInfo.  Mind you this is test code, so it doesn't pay attention to where in the byte[] it is putting things, it is just over writing previous values.  It is just so I could see whether this idea would actually work.


                              // copy to byte[]
                              switch( fieldType )
                              {
                                    case( "System.Int32" ): // int or long
                                          if( fi[c].Name.ToString() == "_size" )
                                          {
                                                size = (int)fi[c].GetValue( obj );
                                          }
                                          _data = BitConverter.GetBytes( size );
                                          break;
                                    case( "System.Int64" ):
                                          _data = BitConverter.GetBytes( (long)fi[c].GetValue( obj ) );
                                          break;
                                    case( "System.Boolean" ):
                                          _data = BitConverter.GetBytes( (bool)fi[c].GetValue( obj ) );
                                          break;
                                                                                                                   :
                                                                                                                   :

Thanks a lot for your input!

choo_chu
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
This is about my first experience with programming Arduino.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now