2016-11-28 19 views
2

最近、私はこのコードをC#アプリケーションで使用しました。1バイト文字列(半角)から2バイト(全角)に変換

cDataString = Strings.StrConv(cDataString, VbStrConv.Wide); 

私はStrConvがVBの文字列関数であることを理解しています。 Microsoft.VisualBasic;を使用して呼び出すことができます。

半角英文字を全角文字に変換することになっています。

質問: 標準のC#関数のみを使用してVB関数を使用せずに、VBヘッダーを含めずに同じ結果を達成する方法はありますか?私は多くのC#文字列変換関数があり、そのうちのいくつかは、unicodeからansiへ、そしてその逆の変換が可能であることを知っています。しかし、それらのどれかが上記のVBと同じ結果を直接得るかどうかはわかりません。だから、これはCで行うことができます#?

ありがとうございます。

更新: 5年前に尋ねられたthis questionに遭遇しました。答えとディスカッションには、それができる方法がいくつか示されています。私が特に知りたいのは、VB関数やVBライブラリに依存せずに、.NETでこれを行うためのより簡単で優れた方法は、5年後と新しいバージョンと何もないことです。

+0

"標準のC#関数"のようなものはないと思います。 AFAIKの 'Microsoft.VisualBasic'への参照は、C#プロジェクトに追加される' Microsoft.CSharp'への参照と同じです。多分、これはhttp://stackoverflow.com/questions/25149458/convert-fullwidth-to-halfwidthに役立つかもしれません。私は個人的には、VBに慣れてから少し不足していると感じられるので、ほとんど全てのC#プロジェクトに 'Microsoft.VisualBasic'への参照を追加しています。 – Slai

+0

ありがとうございます。標準のC#関数では、私は共通の 'System.xxx' .Net関数を意味していました。 VBに慣れた後、C#が少し不足していると感じるかもしれません。しかし残念ながら、VB.IはC#.Netを好んでおり、実際には古いプロジェクトとC++のMFCがあります。 StrConvが仕事を終わらせることは事実だが、私はincludeセクションの 'Microsoft.VisualBasic'が気に入らず、提供する関数についてのアイデアはないので、可能。 – PRinCEKtd

答えて

2

C#には同等の機能はありません。

あなたはMicrosoft.VisualBasic.dllさんStrConvのソースコードに従っている場合、あなたはそれが実際のp /がanswer you linkedに内部的に類似したLCMapStringを呼び出す表示されます。

あなたがMicrosoft.VisualBasic.dllを参照したくない場合は、C#で書かれたヘルパークラスまたはサービスに呼び出す/ Pを包むことができ、このような何か...

// NOTE: CODE NOT TESTED 
// Code from John Estropia's StackOverflow answer 
// https://stackoverflow.com/questions/6434377/converting-zenkaku-characters-to-hankaku-and-vice-versa-in-c-sharp 

public static class StringWidthHelper 
{ 
    private const uint LOCALE_SYSTEM_DEFAULT = 0x0800; 
    private const uint LCMAP_HALFWIDTH = 0x00400000; 
    private const uint LCMAP_FULLWIDTH = 0x00800000; 

    public static string ToHalfWidth(string fullWidth) 
    { 
     StringBuilder sb = new StringBuilder(256); 
     LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_HALFWIDTH, fullWidth, -1, sb, sb.Capacity); 
     return sb.ToString(); 
    } 

    public static string ToFullWidth(string halfWidth) 
    { 
     StringBuilder sb = new StringBuilder(256); 
     LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_FULLWIDTH, halfWidth, -1, sb, sb.Capacity); 
     return sb.ToString(); 
    } 

    [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] 
    private static extern int LCMapString(uint Locale, uint dwMapFlags, string lpSrcStr, int cchSrc, StringBuilder lpDestStr, int cchDest); 
} 

そうでない場合は、あなたが構築できますルックアップテーブルとして機能する辞書。

+0

ありがとう、rshepp。 辞書ではなく、ヘルパークラスのアイデアが好きです。そして、サンプルコードのおかげでたくさんありました。私はこのアイデアを試し、私がそれを使って何ができるかを見ていきます。 – PRinCEKtd

関連する問題