2017-09-17 11 views
-2

は本当に私は、ファイル内の文字列を持っBinaryWriterを使用しているときに文字列が右に移動するのはなぜですか?

...これでいくつかの助けを必要とする:私はC#

private void s_PlayerSStation_Click(object sender, EventArgs e) 
{ 
    BinaryWriter m_bw = new BinaryWriter(File.OpenWrite(ofd.FileName)); 
    if (textBox3.Text == "") 
    { 
     m_bw.Close(); 
     MessageBox.Show("Please enter a number before pressing the button", "Save Station Error"); 
     return; 
    } 
    int x = Convert.ToInt32(textBox3.Text); 
    if (x > 999) 
    { 
     m_bw.Close(); 
     MessageBox.Show("Value exceeds max"); 
     return; 
    } 
    if (textBox3.Text.Length < 3) 
    { 
     if (textBox3.Text.Length < 2) 
     { 
      string p = String.Format("00{0}", textBox3.Text); 
      m_bw.BaseStream.Position = 0x00000004; 
      m_bw.Write(p); 
      m_bw.BaseStream.Position = 0x000038BC; 
      m_bw.Write(p); 
      label4.Text = String.Format("You will now spawn a save station: {0}", textBox3.Text); 
      m_bw.Close(); 
      return; 
     } 
     string z = String.Format("0{0}", textBox3.Text); 
     m_bw.BaseStream.Position = 0x00000004; 
     m_bw.Write(z); 
     m_bw.BaseStream.Position = 0x000038BC; 
     m_bw.Write(z); 
     label4.Text = String.Format("You will now spawn a save station: {0}", textBox3.Text); 
     m_bw.Close(); 
     return; 
    } 
    m_bw.BaseStream.Position = 0x00000004; 
    m_bw.Write(textBox3.Text); 
    m_bw.BaseStream.Position = 0x000038BC; 
    m_bw.Write(textBox3.Text); 
    label4.Text = String.Format("You will now spawn a save station: {0}", textBox3.Text); 
    m_bw.Close(); 
} 

これをで書いた53 61 76 65 53 74 61 74 69 6F 6E 5F 30 30 31

:六角であるSaveStation_001

これは、ユーザーがtextBox3に入力した値に001を変更するだけなので、66に入力すると、SaveStation_001SaveStation_066に変更する必要がありますが、何らかの理由で右に1を移動すると、SaveStation_ 066(16進数:53 61 76 65 53 74 61 74 69 6F 6E 5F |03| 30 36 36)のようになります。誰が問題が何であるか知っていますか?また、idkは新しいヘックスで03を取得します(|とマークされています)

+0

コードを正しくインデントするには、コードをハイライト表示し、ツールバーの '{}'ボタンを押します。私たちはここにコード化するためにペーストビンのリンクを受け入れません。 –

+0

うん。私はそれを押しましたが、それはそれをしないし、私にエラーを与え、本当に遅いので、私はそれを手でインデントする時間がありません。 – Gecko64

+3

あなたが私たちにあなたの時間を与えることを期待しているので、失礼ではありません。それ以外の場合は、そうしないことにします。 –

答えて

1

まず、文字列をバイナリに変換する必要があります。 [03]は、書き込まれる文字列の長さです。

変換機能:

public static byte[] ConvertToByteArray(string str, Encoding encoding) 
{ 
    return encoding.GetBytes(str); 
} 
2

あなたは

BinaryWriter

の現在のエンコーディングでは、このストリームに長さ接頭辞の文字列を書き込みをしている呼んで書くの the documentationを参照してください。

BinaryWriter.Write(string)を呼び出すと、文字列の長さが文字列の前にエンコードされます。あなたが見るのは長さバイトです。

あなたがする必要があるのは、BinaryWriter.Write(char[])の長さのプレフィックスではないオーバーロードを使用することです。 String.ToCharArray()に電話して、配列形式に変換することができます。

m_bw.Write(p.ToCharArray()); 
関連する問題