Массив байтов в вариант

У меня есть массив байтов, который содержит, например,

byte mac[6] = {0x00, 0x8a, 0x0C, 0x98, 0x11, 0x15}.

При вставке его в базу данных с помощью этого оператора

m_pWiFiRecords->Fields->Item[varColumnIndex]->Value = _variant_t((char*)(pRecord->bss_id));

Он сохраняет его как пустой массив, потому что первый элемент = 0x00, и при преобразовании его в массив байтов он сохраняет его как -1.

Не могли бы вы помочь мне разобраться в проблеме?


person user987654    schedule 13.07.2013    source источник


Ответы (1)


Вот что вы должны сделать, чтобы получить двоичные данные в _variant_t. Если база данных настроена для обработки двоичных данных, она должна работать на вас.

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

_variant_t var;
var.vt = VT_ARRAY | VT_UI1;

SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements = 6;
rgsabound[0].lLbound = 0;

var.parray = SafeArrayCreate(VT_UI1,1,rgsabound);

void * pArrayData = NULL;    
SafeArrayAccessData(var.parray,&pArrayData);
memcpy(pArrayData, mac, 6); 
SafeArrayUnaccessData(var.parray);

m_pWiFiRecords->Fields->Item[varColumnIndex]->Value = var;
person edtheprogrammerguy    schedule 13.07.2013