Error copiando u_char* con apis

Iniciado por Kaxperday, 26 Julio 2015, 23:48 PM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

Código (cpp) [Seleccionar]

u_char ip[4];
u_char mac[6];
/*for (int i = 0; i < 4; i++)
ip[i]=pkt_data[i+28];
for (int i = 0; i < 6; i++)
mac[i] = pkt_data[i + 22];*/

_mbscpy_s(ip, _TRUNCATE, pkt_data +28);
_mbscpy_s(mac, _TRUNCATE, pkt_data+22);


Salida con las apis (usando _mbscpy_s):

Citarc0a81260cccccccccc
c0a81190ef684965a6
c0a81188329b236d40
c0a81260329b236d40
c0a81190ef684965a6
c0a81188329b236d40
c0a81260329b236d40
c0a81190ef684965a6
c0a81170188bc327db

Salida usando el for:

Citarc0a812188329b236d40
c0a81260234d5f2697
c0a81c990ef684965a6
c0a81260234d5f2697
c0a812188329b236d40
c0a81c990ef684965a6
c0a812188329b236d40
c0a81260234d5f2697
c0a81c990ef684965a6

No funciona bien _mbscpy_s, ¿¿porque??

Saludos.

Edito: Creo que el fallo radica en que estoy usando UNICODE de juego de caracteres del proyecto, y la funcion como pone aqui:

https://msdn.microsoft.com/en-us/library/td1esda9.aspx

Es para multybyte, y para unicode  sería usar wcscpy_s, (pero ahi ya no sería un argumento de u_char*), ademas _mbscpy_s no da error, ¿que pasa?

Tambien añado que estoy cambiando el proyecto, pues donde antes ponia bucles sustituirlo por apis que hagan lo mismo, pero ya véis como me van de bien, lo mismo ocurre con _mbsicmp que compara u_char* con un u_char*, y dice si son iguales, tampoco me funciona, ¿porque?
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Eternal Idol

#1
Esa funcion es para copiar cadenas (conjunto de caracteres con su cero terminador) y ahi tenes dos arrays de enteros. Usa memcpy.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Kaxperday

#2
Código (cpp) [Seleccionar]
memcpy(ip, pkt_data + 28, 4);
memcpy(mac, pkt_data + 22, 6);


Solucionado, mil gracias eternal idol, eso me pasa por no haber usado nunca esa funcion.

Como usaba UNICODE, se me habia ocurrido una idea muy macabra para hacerlo con apis, que seria usar el _wcscpy sería pasar de u_char a wchar_t y luego otra vez a u_char, claro seria la peor solucion posible.

Jeje, pero oye ya me ahorro los bucles gracias a el memcpy :))))

Saludos.

Edito:

Ahora bien, como comparar cadenas usando la api:

Código (cpp) [Seleccionar]
bool lista_usuarios::contiene_mac(u_char* mac)
{
bool retorno = false;
for each(host h in usuarios)
{
if (_mbsicmp(h.mac, mac) == -1)
{
retorno = true;
break;
}
}
return retorno;
}


Antes usaba bucles para comparar caracter a caracter, pero ¿como puedo usar las api para comparar las cadenas?

Edito: solucionado, memcmp :))))

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Eternal Idol

Cita de: Kaxperday en 27 Julio 2015, 00:12 AMSolucionado, mil gracias eternal idol, eso me pasa por no haber usado nunca esa funcion.

De nada, si nunca viste esta funcion no estaria mal dar un repaso a algun libro de C++.

Cita de: Kaxperday en 27 Julio 2015, 00:12 AMComo usaba UNICODE, se me habia ocurrido una idea muy macabra para hacerlo con apis, que seria usar el _wcscpy sería pasar de u_char a wchar_t y luego otra vez a u_char, claro seria la peor solucion posible.

No podes usar funciones de cadena, no tenes cadenas con las que trabajar.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Kaxperday

CitarDe nada, si nunca viste esta funcion no estaria mal dar un repaso a algun libro de C++.

Jejeje, pues la verdad la había visto muchas veces, pero pero pensé que lo que hacía era copiar cadenas y no entré a estudiar su definición pues ya conocía las funciones que hacían eso. Pero resulto que no compara cadenas, sino partes de esta, lo que buscaba.  :-[ :-[ :-[

:D
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.