ダブルポインタ変数にnewをして動的2次元配列を作り、配列を値上書き用の関数に渡して更新、という動きをさせようとしています。
一旦組み込んで、値をファイル出力してみたのですが、値が想定と違ってしまい、悩んでおります。
配列の上書き方法の誤り、またはファイルへの書き込み方法の誤りになってくると思うのですが、どこに誤りがあるのかが判断付かず、ご教授願えればと思っております。
<サンプルコード>
ファイル値が16進で全FF、2進で全1になるつもりでしたが、思っていた値になってくれておりません。
C++
1void update(DWORD dataCount, DWORD bit, ULONGLONG*** dataList) 2{ 3 ULONGLONG mask = (1 << bit); 4 DWORD index = bit / 64; 5 6 for (DWORD i = 0; i < dataCount; i++) 7 { 8 ((*dataList)[i])[index] |= mask; 9 } 10} 11 12int _tmain(int argc, _TCHAR* argv[]) 13{ 14 // データ数. 15 DWORD dataCount = 0; 16 cin >> dataCount; 17 // 出力ビット数. 18 DWORD bitCount = 0; 19 cin >> bitCount; 20 // 8バイト刻み分割数. 21 DWORD splitCount = (DWORD)ceil(((double)bitCount / 64)); 22 23 // ULONGLONG2次元配列定義. 24 ULONGLONG** value = new(std::nothrow) ULONGLONG*[dataCount]; 25 if (NULL == value) 26 return 0; 27 for (DWORD i = 0; i < dataCount; i++) 28 { 29 value[i] = new(std::nothrow) ULONGLONG[splitCount]; 30 if (NULL == value[i]) 31 return 0; 32 } 33 34 for(DWORD i = 0; i < bitCount; i++) 35 { 36 update(dataCount, i, &value); 37 } 38 39 std::fstream file; 40 file.open(L"C:\output.bin", std::ios::out | std::ios::binary); 41 42 for (DWORD i = 0; i < dataCount; i++) 43 { 44 file.write((const char*)&(*value)[i], sizeof(ULONGLONG) * splitCount); 45 } 46 47 return 0; 48}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/30 05:24
2020/01/30 05:40
退会済みユーザー
2020/01/30 08:22 編集
2020/01/30 08:39
退会済みユーザー
2020/01/30 08:53
2020/01/30 09:48
退会済みユーザー
2020/01/30 10:14