2015-02-09 3 views
0

Если у меня есть C метод #, который принимает в списке как пары, как этотЧто эквивалент C# Списка <byte> в C

private bool ReadResponse(HidDevice device, List<byte> response, int length){ 
    //do something 
} 

мне нужно переписать его в C. Would с помощью unsigned char *pointer как параметр должен быть правильным способом? Вот текущая подпись функции C, которая у меня есть сейчас. При вызове функции я буду передавать unsigned char data[64] для первого параметра.

bool ReadReport(unsigned char *response, int length){ 
    // do something 
} 

Конечное использование для этого, что мне нужно сохранить все прочитанные байты в строку позже.

+2

Вы, кажется, знаете, как это сделать. В чем проблема? – user694733

+0

Значит, вы определенно не можете использовать C++? –

+0

На самом деле это драйвер, написанный для Mac. с C в среде Objective-C намного проще. У меня также мало опыта работы с C++. –

ответ

0

Действительно, это верно, что правильный тип для byte будет использовать unsigned char, или в вашем случае, unsigned char *response. С одной разницей, что в C# вы можете изменять размер/добавлять новые элементы в список на лету, вы не можете сделать это в C; вам может понадобиться использовать realloc, если это так. (Или реализуйте что-то вроде динамического vector).

+0

Если я дам это размер набора говорит unsigned char buffer [800], я могу добавить к этому, используя memcpy, хотя правильно? –

+0

@Stavros_S: Я не уверен, что вы имеете в виду, если вы выделяете массив вроде этого, вы больше не можете изменять его размер. memcpy предназначен для копирования. –

1

Если у вас есть функция с подписью

bool ReadReport(unsigned char *response, int length) 

вам нужно вызвать его как

ReadReport(data, len); 
      ^
      | //it expects unsigned char *, not unsigned char 
+0

да, вот как, я передаю его. –

+1

@Stavros_S Ну, ну, в чем проблема? –

Смежные вопросы