sprintf in C#?

前端 未结 3 773
余生分开走
余生分开走 2020-12-16 12:08

Is there something similar to sprintf() in C#?

I would for instance like to convert an integer to a 2-byte byte-array.

Something like:



        
相关标签:
3条回答
  • EDIT: I'm assuming that you want to convert the value of an integer to a byte array and not the value converted to a string first and then to a byte array (check marc's answer for the latter.)

    To convert an int to a byte array you can use:

    byte[] array = BitConverter.GetBytes(17);
    

    but that will give you an array of 4 bytes and not 2 (since an int is 32 bits.) To get an array of 2 bytes you should use:

    byte[] array = BitConverter.GetBytes((short)17);
    

    If you just want to convert the value 17 to two characters then use:

    string result = string.Format("{0:00}", 17);
    

    But as marc pointed out the result will consume 4 bytes since each character in .NET is 2 bytes (UTF-16) (including the two bytes that hold the string length it will be 6 bytes).

    0 讨论(0)
  • 2020-12-16 12:38
    string s = string.Format("{0:00}", number)
    

    The first 0 means "the first argument" (i.e. number); the 00 after the colon is the format specifier (2 numeric digits).

    However, note that .NET strings are UTF-16, so a 2-character string is 4 bytes, not 2

    (edit: question changed from string to byte[])

    To get the bytes, use Encoding:

    byte[] raw = Encoding.UTF8.GetBytes(s);
    

    (obviously different encodings may give different results; UTF8 will give 2 bytes for this data)

    Actually, a shorter version of the first bit is:

    string s = number.ToString("00");
    

    But the string.Format version is more flexible.

    0 讨论(0)
  • 2020-12-16 12:45

    It turned out, that what I really wanted was this:

    short number = 17;
    System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
    writer.Write(number);
    writer.Flush();
    

    The key here is the Write-function of the BinaryWriter class. It has 18 overloads, converting different formats to a byte array which it writes to the stream. In my case I have to make sure the number I want to write is kept in a short datatype, this will make the Write function write 2 bytes.

    0 讨论(0)
提交回复
热议问题