-1

A dll for USB communications reads data and puts it into a StringBuilder instance, bRx. How can the bytes of data in bRx be moved to a byte buffer to ultimately be written to a file?

DMaxJones
  • 1
  • 2
  • 2
    if you're written them to a file, why do you need them as byte buffer ? you can just use `File.WriteAllText` – Noctis Oct 26 '14 at 05:13
  • Which bytes? Why are they in a StringBuilder in the first place? Do you want a byte representation of _text_ in the StringBuilder? Or does the text in the StringBuilder represent binary data in some numeric format (e.g. hexadecimal)? You really need to post a less-vague question. Give some example code of what you're dealing with, along with some sample data. – Peter Duniho Oct 26 '14 at 06:23

2 Answers2

2

It may vary depending on how the string is encoded / what is stored in it

But try this:

byte[] b = System.Text.Encoding.UTF8.GetBytes(sb.ToString());

or

byte[] b = System.Text.Encoding.ASCII.GetBytes(sb.ToString());

See the SO thread regarding String which should apply to StringBuilder:

How do I get a consistent byte representation of strings in C# without manually specifying an encoding?

Community
  • 1
  • 1
codenheim
  • 20,467
  • 1
  • 59
  • 80
  • I've tried your 1st suggestion. The first byte in SB is 0xff. The problem is that it gets translated to two bytes in the byte buffer, 0xC3 followed by 0xBF. – DMaxJones Oct 26 '14 at 05:21
0

I think there is a separator needed if you are adding using Append(byte value). Microsoft has an example there with a " " - http://msdn.microsoft.com/en-us/library/86yy043k(v=vs.110).aspx

I've prepared an example that fits more to your needs I think:

const char separator = ';';
byte[] inputBytes = { 255, 16, 1 };

StringBuilder sb = new StringBuilder();

foreach (byte b in inputBytes)
    sb.Append(b).Append(separator);

// remove a separator in a tail
sb.Remove(sb.Length - 1, 1);


var byteArrayActual = sb.ToString()
        .Split(separator)
        .Select(x => byte.Parse(x))
        .ToArray();

Debug.Assert(Enumerable.SequenceEqual(inputBytes, byteArrayActual));

After the above code executed there is the same array (as initial) that is ready to be saved to a file: Byte[] (3 items) 255 16 1.

TarasB
  • 2,407
  • 1
  • 24
  • 32