2016-08-02 3 views
1

シリアルからのデータがあります。データは次のとおりです。7 5 16 0 242 48 44 10 109これらの文字列をC#で10進数に変換する方法は?

これらのデータは文字列形式で送信されます。

文字列を10進値に再変換する必要があります。 値が242のデータは63として読み込まれます。 また、128〜255のデータは10進値に正しく変換されません。

私が使用します。

byte[] bytes = Encoding.GetEncoding("Windows-1252").GetBytes(rxString); 

とも:

byte[] bytes = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(rxString); 

byte[] bytes = Encoding.ASCII.GetBytes(rxString) 

すべてが機能していません。私を助けてください。

+0

'decimal'ではなく' int'を意味しますか?それらはすべて私にとってint値のように見えます。 – itsme86

+1

これらは文字列の実際のバイト値ですか?もしそうなら、私はエンコーディングをする必要はないと思う。しかし、例のないデータを伝えるのは難しいでしょう。 – juharr

+0

@kayarista、あなたはこれに対する答えを見つけましたか?受け取った文字列の各文字を対応するバイト値(以下の提案された回答に基づいてあなたのコメントに基づいていると思われる)に変換する方法を尋ねる場合は、キャストするだけでこれを簡単に達成できます文字列内の各文字をバイトに変換します: 'var byteValues = rxString.ToCharArray()。(c =>(byte)c).ToArray();'。 – wablab

答えて

1
// assuming 'serialData' is your string of values... 
var decimals = new List<decimal>(); 
foreach (var token in serialData.Split(' ')) 
{ 
    decimals.Add(decimal.Parse(token)); 
} 
// 'decimals' is now a list of the decimal values. 

...またはあなたがbyte値を探していた場合、あなたはList<byte>List<decimal>を変更し、byte.Parsedecimal.Parseを変更することができます。

+0

データにエラーがある場合はdecimal.TryParseを使用する方が良いかもしれません。 –

0

あなたは、この文字列からバイトの配列を必要とする(私はあなたの試行から仮定)、このワンライナーを使用する場合:

string val = "7 5 16 0 242 48 44 10 109"; 
byte[] list = val.Split(' ').Select(a => Convert.ToByte(a)).ToArray(); 
0

++ Array.ConvertAll<TInput, TOutput> Method (TInput[], Converter<TInput, TOutput>)

string[] val = "7 5 16 0 242 48 44 10 109".Split(' '); 
byte[] temp = Array.ConvertAll(val, byte.Parse); 

または

string val = "7 5 16 0 242 48 44 10 109"; 
byte[] result = Array.ConvertAll(val.Split(' ').Select(c => c).ToArray(), byte.Parse); 
を使用
+0

データがASCII文字列で送信されることを意味します。 例48は "0"、109は "m"として送信されます。 アスキー文字列ではなく、10進数値を取得したいとします。 ただし、127〜255の値の場合、10進値は正しくありません。 値242は63として読み取られました。 ありがとう –

関連する問題