-void hexa_print(const char*name, unsigned char *data, int size) {
- int i;
- printf("%s: ", name);
- for (i=0;i<size;i++) {
- if (data[i]<32)// || data[i]>'9')
- printf("'\\%d'",data[i]);
- else
- printf("%c",data[i]);
- }
- printf("\n");
+const char *hexa_str(unsigned char *data, int size, int downside)
+{
+ static char *buff = NULL;
+ static int buffsize = 0;
+ int i, pos = 0;
+ int begin, increment;
+
+ if (buffsize < 5 * (size + 1)) {
+ free(buff);
+ buffsize = 5 * (size + 1);
+ buff = xbt_malloc(buffsize);
+ }
+
+
+ if (downside) {
+ begin = size - 1;
+ increment = -1;
+ } else {
+ begin = 0;
+ increment = 1;
+ }
+
+ for (i = begin; 0 <= i && i < size; i += increment) {
+ if (data[i] < 32 || data[i] > 126)
+ sprintf(buff + pos, ".");
+ else
+ sprintf(buff + pos, "%c", data[i]);
+ while (buff[++pos]);
+ }
+ sprintf(buff + pos, "(");
+ while (buff[++pos]);
+ for (i = begin; 0 <= i && i < size; i += increment) {
+ sprintf(buff + pos, "%02x", data[i]);
+ while (buff[++pos]);
+ }
+ sprintf(buff + pos, ")");
+ while (buff[++pos]);
+ buff[pos] = '\0';
+ return buff;