[解決済み] バイト配列をデフォルトのヌル以外の特定の値に初期化する?[重複しています]。
質問
C++でやっていた古いプロジェクトをC#に書き換えるのに忙しくしています。
私の仕事は、プログラムを書き換えて、できるだけオリジナルに近い機能を実現することです。
このプログラムを書いた前の開発者は、大量のファイルを処理する間に、ファイルが書かれなければならない決まった形式に対応する、大量のフィールドを含む構造体を作っていましたから、その作業はすべて私のために既に行われています。
これらのフィールドはすべてバイト配列です。次にC++のコードで行うのは
memset
を使用して、この構造体全体をすべての空白文字に設定します (
0x20
). 1行のコードです。簡単だ。
このファイルが最終的に行き着く先のユーティリティは、この形式のファイルを期待しているので、これは非常に重要なことです。この構造体をC#のクラスに変更しなければならないのですが、これらのバイト配列のそれぞれを簡単にすべてのスペース文字に初期化する方法を見つけることができません。
結局、クラスのコンストラクタでこうするしかない。
//Initialize all of the variables to spaces.
int index = 0;
foreach (byte b in UserCode)
{
UserCode[index] = 0x20;
index++;
}
これはうまくいくのですが、もっと簡単な方法があるはずです。配列に
UserCode = new byte[6]
コンストラクタでバイト配列が自動的に初期化され、デフォルトのヌル値になります。宣言時にすべて空白にして、クラスのコンストラクタを呼び出したときに、このようにすぐに初期化されるようにする方法はないのでしょうか?あるいは
memset
-のような関数ですか?
どのように解決するのですか?
小さな配列の場合は、配列の初期化構文を使用します。
var sevenItems = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
大きな配列の場合は、標準的な
for
ループを使用します。これは最も読みやすく、効率的な方法です。
var sevenThousandItems = new byte[7000];
for (int i = 0; i < sevenThousandItems.Length; i++)
{
sevenThousandItems[i] = 0x20;
}
もちろん、この処理を何度も行う必要がある場合は、ヘルパーメソッドを作成してコードを簡潔に保つことができます。
byte[] sevenItems = CreateSpecialByteArray(7);
byte[] sevenThousandItems = CreateSpecialByteArray(7000);
// ...
public static byte[] CreateSpecialByteArray(int length)
{
var arr = new byte[length];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = 0x20;
}
return arr;
}
関連
-
[解決済み】constで変数を初期化しようとすると「initializerの要素が定数でない」というエラーが発生する。
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] Javaでバイト配列を初期化する方法を教えてください。
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] ファイルが使用中であるかどうかを確認する方法はありますか?
-
[解決済み] JavaScriptで配列の長さを初期化する方法は?
-
[解決済み] C#でByte[]Arrayをファイルに書き込むことはできますか?
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#で四捨五入する方法
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み] C#の配列に単一の値を入力/インスタンス化する方法は?