Muchisimas gracias por las respuestas<br><br>La cuestion es que yo recibo ese valor de otro programa y lo tengo que introducir en un programa c para inicializar la estructura, <div>el programa (KLEE) me da directamente esa informacion y la estructura siempre sera la adecuada, pro qeu es la misma estructura que klee ha analizado y me ha dado ese valor hexadecimal. </div>
<div><br></div><div>por lo tanto necesito una forma de re introducir el valor en la estructura y no creo que con memset pueda hacerlo (aunque voy a mirar si tengo alguna alternativa)</div><div><br></div><div>Los valores de la salida seran distintos a 0, ya que lo que hace klee es generar valores para las estructuras pero no es capaz de separarlos por campos de ahi el problema </div>
<div><br></div><div>muchisimas gracias</div><div>mirare la documentacion  que me aconsejas</div><div><br></div><div>Un saludo</div><div><div class="gmail_quote">El 8 de octubre de 2012 12:03, Salvador Pozo <span dir="ltr"><<a href="mailto:salvador@conclase.net" target="_blank">salvador@conclase.net</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">El pasado 2012-10-07 22:10:00, marta vic escribió:<br>
<br>
mv> Hola<br>
mv> Tengo una duda, y busco mas lugares donde pueda acceder a explicaciones o<br>
mv> documentacion que una explicacion concreta,<br>
mv> me gustaria definir los problemas que se pueden encontrar al intentar<br>
mv> ejecutar un codigo como este:<br>
mv> memcpy(&estructura1,"\x00\x00\x00\x00\x00\x00\x00\x00",8);<br>
mv> en este caso<br>
mv> estructura1{<br>
mv>     int a;<br>
mv>     int b;<br>
mv> }<br>
<br>
Hola:<br>
<br>
Antes de ver qué problemas puede haber en este mecanismo, comentar que existen soluciones mejores para hacer lo que se pretende.<br>
<br>
En la misma biblioteca que memcpy existe otra función, memset, que está diseñada específicamente para esa tarea.<br>
<br>
En tu caso concreto, podría usarse de este modo:<br>
<br>
----8<------<br>
struct {<br>
    int a;<br>
    int b;<br>
} estructura1;<br>
<br>
memset(&estructura1,0,sizeof(structura1));<br>
----8<------<br>
<br>
Esto tiene algunas ventajas evidentes:<br>
1) No necesitas una cadena de ceros de longitud arbitraria, ya que usamos un único valor de tipo int, que se usará como un byte (un unsigned char).<br>
2) No tenemos que usar una constante como tamaño de la estructura, en su lugar usamos en operador sizeof, que nos da el tamaño exacto de la estructura, independientemente de la arquitectura y de la alineación de bytes usada.<br>

<br>
Respondiendo a tu pregunta, ahora no puedo decirte un lugar donde puedas encontrar información sobre ese tema, sobre todo, porque no sé si existe algo tan concreto.<br>
<br>
Los problemas son, entre otros, los que ha indicado José Luis:<br>
<br>
- Dependiendo de la plataforma y del compilador, los valores enteros pueden tener distintos tamaños. En general, el tamaño de una estructura estará determinado por el tamaño de cada uno de sus componentes, y en C ese tamaño no está definido, salvo que el de int es mayor o igual que char, y el de long int mayor o igual que int. (<a href="http://c.conclase.net/curso/index.php?cap=002#inicio" target="_blank">http://c.conclase.net/curso/index.php?cap=002#inicio</a>)<br>

<br>
- Otro problema es el de alineación de las variables en memoria. A menudo, para mejorar la eficacia de los procesadores a la hora de acceder a memoria, las direcciones de las variables pueden ser múltiplos de 2, de 4 o de 8, dependiendo del tamaño de la palabra del microprocesador.<br>

(<a href="http://c.conclase.net/curso/index.php?cap=011b#inicio" target="_blank">http://c.conclase.net/curso/index.php?cap=011b#inicio</a>)<br>
<br>
Por ejemplo, en esta estructura:<br>
struct A {<br>
   int x;<br>
   char a;<br>
   int y;<br>
   char b;<br>
};<br>
<br>
Si el alineamiento es de cuatro bytes, las posiciones de memoria de cada elemento del array no serán consecutivas:<br>
0-3: x<br>
4: a<br>
5-7: libre<br>
8-11: y<br>
12: b<br>
13-15: libre<br>
<br>
De este modo, una estructura que debería ocupar 10 bytes, en realidad ocupa 16.<br>
<br>
Es más, el tamaño final puede depender del orden en que se declaran los elementos de la estructura, y de si se activa o no el alineamiento de bytes.<br>
<br>
- El problema con el formato Big Endian o Little Endian, en el caso concreto de inicializar con ceros, no tiene importancia. Otro tema sería si los valores iniciales no fueran nulos.<br>
<br>
- Por último, los problemas son casi iguales si se trata de arrays o estructuras. En los dos casos nos afecta la arquitectura y el problema del alineamiento de bytes.<br>
<br>
En cuanto a soluciones, arriba te he comentado la que se suele usar en C, que consiste en utilizar la función memset.<br>
<br>
En C++ es preferible usar constructores, al menos en el caso de estructuras, ya que para los arrays puede interesar más usar memset también.<br>
<br>
En general, no es buena idea que el programador haga las cuentas si puede hacer que las haga el compilador. Para hacer las cuentas a mano, como en tu ejemplo, debemos asumir el tamaño de las variables y cierta alineación, pero eso hace que el programa no sea transportable, y no podemos garantizar que funcione correctamente si se compila en otra plataforma, con otro sistema operativo o con otro compilador.<br>

<br>
Seguramente encuentres documentación en la red haciendo consultas con:<br>
memcpy gibendian<br>
memcpy alineamiento bytes<br>
memcpy plataformas<br>
<br>
Suerte, y hasta pronto.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Salvador Pozo (Administrador)<br>
mailto:<a href="mailto:salvador@conclase.net">salvador@conclase.net</a><br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br></div>