вывести строку в байтовый указатель в c # - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь перевести код C на C #, и я наткнулся на строку кода, которую у меня возникают проблемы с переводом.

sprintf((char*)&u8FirmareBuffer[0x1C0] + strlen((char*)&u8FirmareBuffer[0x1C0]), ".B%s", argv[3]);

конкретно эта строка. u8FirmwareBuffer - это массив без знака в C, байтовый массив в C #, я бы предположил. argv [3] является строкой. Как я могу перевести эту строку на C #.

Спасибо за вашу помощь.

Редактировать: это было отмечено как дубликат, но я думаю, что они различаются, потому что я использую указатели, которые не работают с решениями, представленными на отмеченном посте.

1 Ответ

0 голосов
/ 14 января 2019

Вы можете сделать что-то вроде:

string myString = "This is my string";
byte[] buffer = new byte[1024];
int offset = 0;

    // if you pass a byte buffer to the constructor of a memorystream, it will use that, don't forget that it cannot grow the buffer.
using (var memStream = new MemoryStream(buffer))
{
    // you can even seek to a specific position
    memStream.Seek(offset, SeekOrigin.Begin);

    // check your encoding..
    var data = Encoding.UTF8.GetBytes(myString);

    // write it on the current offset in the memory stream
    memStream.Write(data, 0, data.Length);
}

Это также возможно с StreamWriter

string myString = "This is my string";
byte[] buffer = new byte[1024];
int offset = 0;

// if you pass a byte buffer to the constructor.....(see above)
using (var memStream = new MemoryStream(buffer))
using (var streamWriter = new StreamWriter(memStream))
{
    // you can even seek to a specific position
    memStream.Seek(offset, SeekOrigin.Begin);

    streamWriter.Write(myString);
    streamWriter.Flush();

    // don't forget to flush before you seek again
}              
...