2020年11月18日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 3115 count

【入門級】上位バイトと下位バイトを合体させる

Written By: 川俣 晶連絡先

 時折、1つだったはずのデータが泣き別れになって得られることがあります。

 たとえば、上位バイトは0x12で下位バイトは0x34といった感じです。

 これを合体させて0x1234にするにはどうすれば良いのでしょうか。

 文字列に置き換えて結合しますか?

 数値のままで結合はできます。

 これには2つの機能を使います。

  • ビットシフト演算子<< 1バイトは8bitだから8bitシフトさせると上位バイトになる
  • OR演算子| 値が"1"のビットを合体させて2つの値を1つにまとめる

 つまり、こういうことです。

  1. 下位バイトはそのまま使う
  2. 上位バイトは8bit左シフトさせることで、正しい桁に合わせられる
  3. 両者をOR演算子で合体させると、上位バイトと下位バイトを合体した値になる

罠の数々 §

  • OR演算子の結果は加算などと同じく最低でもint型の幅になってしまうので、キャストでushortに強制している
  • :xは16進出力を行うための指定だ。

参考リンク §

ビットごとの演算子とシフト演算子 (C# リファレンス)

 シフトしすぎると値が1のビットが表現可能な範囲を飛び出してしまう。たとえばushort型は16bitしかないので、16回シフトするとビットは全て飛び出してしまう。飛び出したビットはどこに行ってしまうのだろうか。上記のリンクから確かめてみよう。

リポジトリ §

https://github.com/autumn009/cshowto

ShiftBits §

using System;

class Program

{

    static void Main()

    {

        byte high = 0x12;

        byte low = 0x34;

        ushort combined = (ushort)(low | high << 8);

        Console.WriteLine($"{combined:x}");

    }

}

実行結果

1234

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
11月
19日
【入門級】数値の右揃えと左揃え
3days 0 count
total 1135 count
【C# コーディング How To】の前のコンテンツ
2020年
11月
17日
【入門級】ファイルを扱うメソッドで文字列も読み込ませたい!
3days 0 count
total 829 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20201118102642
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.