return 一个结果的最佳方式
The best way to return a result
我写了下面的函数。此函数接收十六进制值的地址,例如0x4571 并从十六进制值的位位置计算日、月和年。
void fat_dir_date(char *dateAr) {
const unsigned int MaskDayOfMonth = 0x1F; //0000000000011111
const unsigned int MaskMonthOfYear = 0x1E0; //0000000111100000
const unsigned int MaskYear = 0xFE00; //1111111000000000
unsigned int DayOfMonth = hex & MaskDayOfMonth; //AND Bit Operation
unsigned int MonthOfYear = hex & MaskMonthOfYear; //AND Bit Operation
MonthOfYear = MonthOfYear >> 5; //Bitshift to right position
unsigned int Year = hex & MaskYear; //AND Bit Operation
Year = Year >> 9; //Bitshift to right position
printf("%d.%d.%d", DayOfMonth, MonthOfYear, 1980+Year);
}
计算正常。我在整数 DayOfMonth、MonthOfYear 和 Year 中得到了正确的数字。但是我不想用 printf 将它们打印出来,而是想 return 调用函数的值。以最好的方式连接成单个值或字符串。
用 C 语言解决这个问题的最佳方法是什么?
如果需要打印数据,不需要使用数值,我认为是这样的:
char * fat_dir_date(char *dateAr,unsigned int hex) {
const unsigned int MaskDayOfMonth = 0x1F; //0000000000011111
const unsigned int MaskMonthOfYear = 0x1E0; //0000000111100000
const unsigned int MaskYear = 0xFE00; //1111111000000000
unsigned int DayOfMonth = hex & MaskDayOfMonth; //AND Bit Operation
unsigned int MonthOfYear = hex & MaskMonthOfYear; //AND Bit Operation
MonthOfYear = MonthOfYear >> 5; //Bitshift to right position
unsigned int Year = hex & MaskYear; //AND Bit Operation
Year = Year >> 9; //Bitshift to right position
sprintf(dateAr,"%02u.%02u.%4u", DayOfMonth,MonthOfYear, 1980+Year);
return dateAr;
}
int main(void)
{
char dateAr[11];
unsigned int hex=0x1010; //Random :)
printf("%s\n" , fat_dir_date(dateAr,hex))
return 0;
}
你有几个选择:
- 创建一个具有三个字段的
struct
,return 它,
- 让来电者将您填写的
struct
传给您,
- 让调用者向您传递一个字符串缓冲区,您可以使用
sprintf
或 打印到该缓冲区
- 动态创建一个字符串,打印到它,然后return。
第一个选项清晰易懂。它需要一些复制,但对于像您需要的小结构来说很好:
struct DateTime {
int DayOfMonth;
int MonthOfYear;
int Year;
};
struct DateTime fat_dir_date(unsigned int hex) {
struct DateTime res;
res.DayOfMonth = ...
res.MonthOfYear = ...
res.Year = ...
return res;
}
我写了下面的函数。此函数接收十六进制值的地址,例如0x4571 并从十六进制值的位位置计算日、月和年。
void fat_dir_date(char *dateAr) {
const unsigned int MaskDayOfMonth = 0x1F; //0000000000011111
const unsigned int MaskMonthOfYear = 0x1E0; //0000000111100000
const unsigned int MaskYear = 0xFE00; //1111111000000000
unsigned int DayOfMonth = hex & MaskDayOfMonth; //AND Bit Operation
unsigned int MonthOfYear = hex & MaskMonthOfYear; //AND Bit Operation
MonthOfYear = MonthOfYear >> 5; //Bitshift to right position
unsigned int Year = hex & MaskYear; //AND Bit Operation
Year = Year >> 9; //Bitshift to right position
printf("%d.%d.%d", DayOfMonth, MonthOfYear, 1980+Year);
}
计算正常。我在整数 DayOfMonth、MonthOfYear 和 Year 中得到了正确的数字。但是我不想用 printf 将它们打印出来,而是想 return 调用函数的值。以最好的方式连接成单个值或字符串。
用 C 语言解决这个问题的最佳方法是什么?
如果需要打印数据,不需要使用数值,我认为是这样的:
char * fat_dir_date(char *dateAr,unsigned int hex) {
const unsigned int MaskDayOfMonth = 0x1F; //0000000000011111
const unsigned int MaskMonthOfYear = 0x1E0; //0000000111100000
const unsigned int MaskYear = 0xFE00; //1111111000000000
unsigned int DayOfMonth = hex & MaskDayOfMonth; //AND Bit Operation
unsigned int MonthOfYear = hex & MaskMonthOfYear; //AND Bit Operation
MonthOfYear = MonthOfYear >> 5; //Bitshift to right position
unsigned int Year = hex & MaskYear; //AND Bit Operation
Year = Year >> 9; //Bitshift to right position
sprintf(dateAr,"%02u.%02u.%4u", DayOfMonth,MonthOfYear, 1980+Year);
return dateAr;
}
int main(void)
{
char dateAr[11];
unsigned int hex=0x1010; //Random :)
printf("%s\n" , fat_dir_date(dateAr,hex))
return 0;
}
你有几个选择:
- 创建一个具有三个字段的
struct
,return 它, - 让来电者将您填写的
struct
传给您, - 让调用者向您传递一个字符串缓冲区,您可以使用
sprintf
或 打印到该缓冲区
- 动态创建一个字符串,打印到它,然后return。
第一个选项清晰易懂。它需要一些复制,但对于像您需要的小结构来说很好:
struct DateTime {
int DayOfMonth;
int MonthOfYear;
int Year;
};
struct DateTime fat_dir_date(unsigned int hex) {
struct DateTime res;
res.DayOfMonth = ...
res.MonthOfYear = ...
res.Year = ...
return res;
}