簡體   English   中英

訪問std :: array <std::array> C ++中的元素

[英]access std::array<std::array> elements in c++

我需要訪問數組數組中的元素。

我的代碼曾經是這樣的:

byte var0[8]; // array of 8 bytes
byte var1[8];
byte var2[8];

c.read(100, 1000, 8, &var0); // reading 8 bytes starting from address 1000 and saving them in var0
c.read(100, 3700, 8, &var1);
c.read(100, 6400, 8, &var2);

一切工作正常,但是由於我不僅需要聲明3個數組,還需要聲明60個數組,所以我想編寫更好的代碼版本。

我想到這樣寫:

std::array<std::array<byte, 8>, 60> arr;

for(int i = 0; i < 60; i++) {
    c.read(100, 1000 + (2700 * i), 8, arr[i]); // trying to save 8 bytes inside arr[i]
}

我想到寫一個每個8字節的數組的數組。

然后,我使用for循環填充它們。 在循環中寫入arr [i]是否正確?

現在我該如何訪問這些值?

我以前曾經寫過這樣的東西:

std::cout << getBitAt(var0, 1, 2) << \n; // printing the 3rd bit of the 2nd byte of var0

現在,我想對我創建的數組的數組做同樣的事情,即像這樣:

std::cout << getBitAt(arr[0], 1, 2) << \n; 

編輯 :read方法的定義是:

int read(int DBNumber, int Start, int Size, void *pUsrData);

這是來自稱為snap7的庫中的方法

我嘗試了解決方案:

for(int i = 0; i < 60; i++) {
    c.read(100, 1000 + (2700 * i), 8, arr[i].data());
}

但是我得到這個錯誤:

error: no matching function for call to ‘PLC::GetBitAt(std::array<std::array<unsigned char, 8>, 60>::value_type&, int, int)’

所以我試着(不知道它是否正確)使用:

std::cout << getBitAt(arr[0].data(), 1, 2) << \n; 

但是我現在得到了錯誤:

 error: no type named ‘type’ in ‘struct std::enable_if<false, std::basic_ostream<char>&>’

方法GetBitAt是:

bool getBitAt(byte buffer[], int pos, int bit) {
  byte mask[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
  if(bit < 0) bit = 0;
  if(bit > 7) bit = 7;
  return (buffer[pos] & mask[bit]) != 0;
}

解決

c.read(100, 1000 + (2700 * i), 8, arr[i].data());

此解決方案有效。

我在導致最后一個錯誤的代碼中遇到了另一個問題。 謝謝大家

在循環中寫入arr [i]是否正確?

是的,在循環內編寫arr[i]是正確的。 arr[i]arr的第i個元素。

我收到一個錯誤,即“ no known conversion for argument 1 from 'std::array<std::array<unsigned char, 8>, 60>::value_type {aka std::array<unsigned char, 8>}' to 'byte* {aka unsigned char*}'

這意味着read不接受std::array作為參數。 arr[i]std::array ,所以您不能像這樣傳遞它。 您可以改用arr[i].data() (或如果願意,可以使用&arr[i][0] )獲取指向數據的指針。 與常規數組不同, std::array不會衰減到指向第一個元素的指針。

現在我該如何訪問這些值?

您可以使用arr[i]訪問子數組,並使用arr[i][j]訪問子數組的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM