मेरे पास char *buffer के रूप में परिभाषित वर्णों का एक बफर है। जब मैं अपना एक्सबीईई पैकेट डेटा भेजता हूं, तो एक निश्चित आकार की आवश्यकता (84 बाइट्स) होती है। मेरी समस्या यह है कि मैं नहीं जानता कि बफर को 84 बाइट विखंडू में कैसे परिवर्तित किया जाए क्योंकि मैं पुनरावृति करता हूं। यहाँ मुझे क्या मिलता है:

warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
     packet = (buffer + i);
            ^

और मेरा कोड:

int sendSerialBuffer(char *buffer, int length)
{
  int i = 0;
  int result = 0;
  char (* packet)[84];

  // Iterate through all the bytes in the buffer
  for (i = 0; i < length; i = i + 84)
  {
    packet = (buffer + i);
    result = sendPacket(packet)
  }
  return 0;
}

संपादित करें: मैंने char packet[84]; जैसे पैकेट घोषित करने और प्राप्त करने का भी प्रयास किया है:

error: assignment to expression with array type
     packet = (buffer + i);
            ^

साथ ही, SendPacket को इस प्रकार परिभाषित किया गया है:sendPacket(char packet[84]);

-3
JBaczuk 2 मई 2018, 20:17

2 जवाब

सबसे बढ़िया उत्तर
int i = 0;
int result = 0;

// Iterate through all the bytes in the buffer
for (i = 0; i < length; i = i + 84)
{
  char packet[84];
  memcpy(packet, buffer[i],84);
  result = sendPacket(packet);
}

return 0;  

ध्यान दें कि यह उस मामले से संबंधित नहीं है जहां बफर 84 का सटीक गुणज नहीं है

जीवन आसान हो जाएगा यदि SendPAcket अपेक्षित char * बजाय char [84]। फिर कोड पढ़ेगा

int i = 0;
int result = 0; 

// Iterate through all the bytes in the buffer
for (i = 0; i < length; i = i + 84)
{
  char packet[84];
  memcpy(packet, buffer[i],84);
  result = sendPacket(buffer[i]);
}

return 0;
2
JBaczuk 2 मई 2018, 20:47

यह काम नहीं करता है:

packet = (buffer + i);

क्योंकि प्रकार समान नहीं हैं। packet का प्रकार char (*)[84] है (अर्थात 84 char की एक सरणी का सूचक) जबकि buffer का प्रकार char * है। आपको वास्तव में इस अतिरिक्त प्रकार की आवश्यकता नहीं है।

यह देखते हुए कि sendPacket को इस प्रकार परिभाषित किया गया है:

int sendPacket(char packet[84])

पैरामीटर packet में वास्तव में टाइप char * होता है, क्योंकि सरणियाँ फ़ंक्शन पैरामीटर के रूप में क्षय पहले तत्व के सूचक में बदल जाती हैं।

फिर आप इस फ़ंक्शन को निम्नानुसार कॉल कर सकते हैं:

result = sendPacket(buffer + i)

व्यंजक buffer + i बफ़र में तत्व i के पते का मूल्यांकन करता है। यह मानते हुए कि sendPacket इस पते से 84 बाइट्स पढ़ता है, यह अगले 84 बाइट्स को बफर में ले जाएगा।

1
dbush 2 मई 2018, 20:31