我是新的C和我创造了一些代码,不工作...复制多维列C
我得到一个警告,而initLetterLib():整数转换导致截断
我尝试memcpy我的libraryLetter到我的outputLED,但它不起作用。 我只是得到0x00到我的outputLED。 我试图在outputLED中复制别的东西 - 这真的很好。 但我不明白为什么有我的libraryLetters一个问题...
#define LETTER_WIDTH 6
typedef unsigned char letter[LETTER_WIDTH];
letter libraryLetters[128];
void initLetterLib(){
*libraryLetters[0x20] = 0x000000000000; // Blank
*libraryLetters['A'] = 0xFE909090FE00;
*libraryLetters['H'] = 0xFE101010FE00;
*libraryLetters['L'] = 0xFE0202020200;
*libraryLetters['O'] = 0xFE828282FE00;
*libraryLetters['U'] = 0xFE020202FE00;
*libraryLetters['R'] = 0xFE9894946200;
*libraryLetters['Z'] = 0x868A92A2C200;
*libraryLetters['I'] = 0x0000FE000000;
*libraryLetters['F'] = 0xFE9090808000;
}
// takes a String and generates the outputsequence for LEDs
unsigned char * stringToLEDText(char* textString)
{
static unsigned char outputLED[LED_STEPS];
unsigned char i = 0; // index
// check length of string text
unsigned short length = strlen(textString);
// if more than 10 letters are used return error
if (length > LETTERS_LED_OUTPUT)
{
printf("Error: Too much letters. Just 10 Letters are allowed\n");
return 0;
}
// through complete string
for (i = 0; i < length; i++)
{
memcpy(&outputLED[i * LETTER_WIDTH], &(libraryLetters[textString[i]]),
LETTER_WIDTH);
}
// fills rest with 0
for (i = length * LETTER_WIDTH; i < LED_STEPS; i++)
{
outputLED[i] = 0x00;
}
return outputLED;
}
任何想法?
感谢 费边
你期望使用什么整数类型(MCU)来处理48位常量,比如0xFE0202020200?也许你的MCU是64位的?将'letter'类型定义为'int64'或类似的64位'long',而不是数组。否则,你不能完成任务。 – i486
您的代码格式和缩进遍布整个地方。请[编辑]并修复它。 – user694733