C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で配列のバイト数をカウントする方法【Buffer.ByteLength活用】

C#では、Buffer.ByteLengthメソッドを使うことで、バイト配列の総バイト数を簡単に取得できます。本記事では、byte型配列の宣言からバイト数のカウント、そして各要素の表示までを、実際のコード例とともにわかりやすく解説します。

1. バイト配列を宣言する

まずは、カウント対象となるbyte型の配列を用意します。

byte[] b = { 5, 9, 19, 23, 29, 35, 55, 78 };

この配列には8個の要素が格納されており、byte型は1要素あたり1バイトのため、合計8バイトとなります。

2. Buffer.ByteLengthメソッドでバイト数を取得する

配列のバイト数をカウントするには、Buffer.ByteLengthメソッドを使用します。このメソッドは引数に渡された配列全体のサイズをバイト単位で返します。

int len = Buffer.ByteLength(b);

ポイント: Array.Lengthプロパティが「要素数」を返すのに対し、Buffer.ByteLengthは「実際のメモリ上のバイト数」を返します。byte型のように1要素1バイトの場合は同じ値になりますが、int型(4バイト)やdouble型(8バイト)などの配列では結果が異なるため注意が必要です。

3. サンプルコード(完全版)

以下は、バイト配列の全要素を表示し、最後にバイト数を出力する完全なプログラムです。

using System;
class Program {
    static void Main() {
        // バイト配列の宣言
        byte[] b = { 5, 9, 19, 23, 29, 35, 55, 78 };

        // 配列のバイト数を取得
        int len = Buffer.ByteLength(b);

        // 全要素を順番に表示
        for (int i = 0; i < len; i++) {
            Console.WriteLine(b[i]);
        }

        // バイト数の合計を表示
        Console.WriteLine("Length of byte array = " + len);
    }
}

4. 実行結果

5
9
19
23
29
35
55
78
Length of byte array = 8

実行すると、配列内の8つの要素が1行ずつ表示され、最後に「Length of byte array = 8」として配列の総バイト数が出力されます。

まとめ

  • Buffer.ByteLength(配列) を使うことで、配列のバイト数を1行で取得できる。
  • BufferクラスはSystem名前空間に属しているため、追加のusingは不要。
  • 要素数ではなくバイト数が必要な場面(バイナリデータ処理やストリーム操作など)で特に役立つ。
  1. Pythonで同種(ホモジニアス)な部分文字列の数をカウントするプログラム

    文字列 s が与えられたとき、その中に含まれる「同種(homogenous)な部分文字列」の総数を求める問題を考えます。同種な文字列とは、構成するすべての文字が同一である文字列のことです。答えは非常に大きな値になる可能性があるため、10^9+7 で割った余りを返します。 問題の例 たとえば、入力が s = xyyzzzxx の場合、出力は 13 になります。同種の部分文字列は次のように数えられます。 x が 3 回 xx が 1 回 y が 2 回 yy が 1 回 z が 3 回 zz が 2 回 zzz が 1 回 したがって、(3 + 1 + 2 + 1 + 3 + 2 + 1) =

  2. Pythonで配列の反転数(転倒数)をカウントする方法

    はじめに この記事では、配列内の反転(インバージョン)をカウントする問題とその解決策について詳しく解説します。 問題定義 問題: リストが与えられたとき、その中に含まれる反転の数をカウントして表示します。 反転数とは、配列を昇順にソートされた状態にするために必要な入れ替え(スワップ)の回数を表す指標です。具体的には、i < j かつ arr[i] > arr[j] を満たす要素のペア(i, j)の総数として定義されます。 実装例 # 反転数をカウントする関数 def InvCount(arr, n): inv_count = 0 for i in range(n