人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C#プログラマにお聞きします。
C言語では
printf(”%4.4s”, ”あいう”) → あい
printf(”%4.4s”, ”12345”) → 1234
このように必ず先頭4バイト(4文字ではなくて)のみ表示されるようなC#のシンプルなコードはどのようなものですか?

●質問者: toaraich
●カテゴリ:コンピュータ
✍キーワード:4S C# C言語 あい コード
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● kimizu
●5ポイント

http://www-ise2.ist.osaka-u.ac.jp/~iwanaga/study/csharp/st_embed...

組込み型 (C# によるプログラミング入門)

まず、C#では、char型は2byteです。

Unicodeを採用しているため、全ての文字を

2byteで表現しています。半角/全角に関わらず、全てです。

http://www.microsoft.com/japan/msdn/academic/Articles/Algorithm/...

アルゴリズム入門 : 第 1 章 Visual C# による文字列処理入門

よって、4byte取り出すには、2文字取り出せば

良いはずです。


string s = ”あいう”;

Console.WriteLine( s.SubString(0,4) );


でしょうか。

◎質問者からの返答

質問が不完全でしたねm(..)m。 全角2文字、半角1文字と数えた場合に、常に最初の4文字を取り出すコードを知りたかったのですが。。。


2 ● kazuki12112005
●0ポイント

http://ruffnex.oc.to/ipusiron/cgi/forum/patio.cgi

質問掲示板@Security Akademeia

またですか・・・・


ここのサイトで質問してください


ペコリ(o_ _)o))


3 ● birdie-brain
●30ポイント

http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html#i1...

.NET TIPS - @IT

.NET環境において質問のような文字数の数えかたをするには、Encodingクラスを使用するのがよいでしょう。

まず、適切なエンコーディング(UTF-8, ShiftJIS等)で文字列をバイト列に変換し、その先頭4バイトを再び文字列に変換する、という手順を踏みます。


System.Text.Encoding encoding = System.Text.Encoding.UTF8;

Console.WriteLine(encoding.GetString(encoding.GetBytes(”あいう”), 0, 4));


あまりシンプルじゃありませんね。。。


4 ● skaede
●20ポイント

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

MSDN ライブラリ サイト移行に関する重要なお知らせ

ご質問の内容を”Unicode文字列の先頭から、Shift JISで4バイト分だけコンソールに出力したい”と理解しました。


こんなかんじになるかと。


byte[] bytes = System.Text.Encoding.Default.GetBytes(”あいう”);

System.Text.Decoder dec = System.Text.Encoding.Default.GetDecoder();

char[] buffer = new char[4];

dec.GetChars(bytes,0,4,buffer,0);

Console.WriteLine(buffer);


質問の意味をとりちがえていたら、ごめんなさい。


5 ● lupu
●30ポイント

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

MSDN ライブラリ サイト移行に関する重要なお知らせ

using System;

using System.Text;


class Sample

{

public static void Main()

{

string text1 = ”あいうえお”;

string text2 = ”12345”;


Encoding ansi = Encoding.Default;

Console.WriteLine(ansi.GetString(ansi.GetBytes(text1), 0, 4));

Console.WriteLine(ansi.GetString(ansi.GetBytes(text2), 0, 4));

}

}


こんなんでどうでしょう…?

自分の環境では上手くいきました。

◎質問者からの返答

有り難う御座います!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ