Преобразование значений из массива в ascii?

#include<stdio.h>
#define msize 4096
struct memory
{
int a[msize];
};

void read(struct memory *m)
{
int i;
for(i=0;i<sizeof(msize);i++)
{
scanf("%d",&m->a[i]);
}
}

int main()
{
struct memory m;
m.a[0]=250; // temperature value of 25,0
m.a[4]=01; // heater status OFF
m.a[8]=240; // temperature value of 24,0
m.a[12]=00; // heater status ON
m.a[16]=220; // temperature value of 22,0
m.a[20]=00; // heater status ON
read(&m);
return 0;
}

Я создал структуру определенного размера памяти и вставил некоторые значения в массив и считал эти значения из массива. У меня есть трудности с преобразованием этого значения в ASCII.

-1

Решение

В for(i=0;i<sizeof(msize);i++), это не будет i<4096Скорее сравню i до размера целого числа на вашей платформе. В 32-битных системах это будет 4. Так что цикл выйдет только после 4 итераций.

Далее в вашей функции, &m->a[i] будет m->a[i] как m это указатель

PS Что-то не так с логикой вашей программы. Вы присваиваете некоторые значения элементам массива в main(), но перезаписывают то же самое в функции read().

Что касается преобразования целочисленных значений из массива в ASCII, это довольно просто. Вам просто нужно использовать %c спецификатор формата и передача элементов массива являются аргументами. Но я должен указать, что для печати нет 450 значений ASCII. Так как у символа есть только один байт, с ним можно максимально использовать 256 символов.

PS Многие символы ASCII, которые вы хотите напечатать, не доступны для печати. ​​Один из них имеет значение ASCII, равное 0,

1

Другие решения

Мое предложение вводится по символу, если вы хотите сохранить в ASCII.

как это

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define msize 4096
struct memory {
char a[msize];
};

/*
m.a[0]=250; // temperature value of 25,0
m.a[4]=01;  // heater status OFF
m.a[8]=240; // temperature value of 24,0
m.a[12]=00; // heater status ON
m.a[16]=220;// temperature value of 22,0
m.a[20]=00; // heater status ON
*/

int read(struct memory *m){
char inputbuff[4+1];
int i=0;

memset(m->a, ' ', sizeof(m->a)/sizeof(m->a[0]));//initialize by space
while(i<msize/(4+4)){
printf("input temperature value e.g.25,0 : 250(and enter)\n");
fgets(inputbuff, sizeof(inputbuff), stdin);
strncpy(m->a + i*4, inputbuff, 3);
//i+=1;
printf("input heater status ON or OFF e.g.ON : 00 , OFF : 01(and enter)\n");
fgets(inputbuff, sizeof(inputbuff), stdin);
strncpy(m->a + (i+1)*4, inputbuff, 2);
i += 1;
printf("continue input? (y or n) : ");
fgets(inputbuff, sizeof(inputbuff), stdin);
if(*inputbuff=='n' || *inputbuff=='N'){
break;
}
}
return i;
}

int main(void){
struct memory m;
read(&m);
{
//check print
m.a[msize-1]='\0';
printf("%s\n", m.a);
}

return 0;
}

ДОБАВИТЬ для более

#include <stdio.h>
#include <string.h>

#define msize 4098

int *storeInt(void *address){
int *ip =(int*)address;
*ip = 777;//ip[0]=777;ip[1]=888;...
return ip;
}

char *storeChars(void *address){
char *cp =(char*)address;
strcpy(cp, "hello");
return cp;
}

void dump(void *address, size_t length){
unsigned char *cp = (unsigned char*)address;
size_t i;
for(i=0;i<length;++i){
if(i % 16 == 0) printf("\n");
printf("%02X ", *cp++);
}
}

int main(void){
static char memory[msize];//create a static memory of a particular size
char *block1, *block2;

block1 = &memory[0];
block2 = &memory[1024*2];//split a virtual

int *ip;
ip=storeInt(block1);//store some values in the memory
printf("%d\n", *ip);//read the values from the memory

char *cp;
cp=storeChars(block2);//set hello\0
printf("%s\n", cp);//say hello

char ascValue[12];
int value = *ip;//777
//convert "value of int" to Ascii
sprintf(ascValue, "%d", value);
//Display it
printf("value is %s\n", ascValue);

dump(block1, 8);
dump(block2, 8);

return 0;
}
0

Если ваша функция read () предназначена для чтения из памяти и печати на терминале, тогда вы должны использовать printf () вместо scanf (). printf () преобразует целочисленные значения в ASCII через строку формата% d. scanf () читает со стандартного ввода и сохраняет в памяти. scanf () преобразует из ASCII в целое число через строку формата% d.

0
По вопросам рекламы [email protected]