gpt4 book ai didi

c - SCSI 感知到字符串

转载 作者:行者123 更新时间:2023-11-30 15:28:11 27 4
gpt4 key购买 nike

大多数人都知道谁使用过 SCSI,如果发出 SCSI 命令,设备可以返回所谓的检测代码以及附加信息。

基本上你有 3 个数字,它们在一起就有意义。

这是维基百科上的列表: http://en.wikipedia.org/wiki/Key_Code_Qualifier

我需要一个函数,它接受这 3 个数字并识别发生了什么错误并基于它返回一个 char 数组。我一直在想一个好办法。分支 if 语句看起来很不优雅...

我想知道是否有一种简单的方法可以做到这一点,而无需一些复杂的功能。

最佳答案

对于此类问题,嵌套开关是最糟糕的事情。查找表要简单得多。您可能需要这样的东西:

struct SCSILookupTableElement
{
unsigned char key;
unsigned char asc;
unsigned char ascq;
const char *errorcondition;
} SCSILookupTable[] =
{
{ 0, 0, 0, "No error"},
{ 0, 0x5d, 0, "No sense - PFA threshold reached"},
{ 1, 1, 0, "Recovered Write error - no index"},
...
{0xff, 5, 0, "Illegal request"} // 0xff stands for X
...
};


const char *SCSIErrortext(int key, int asc, int ascq)
{
int i ;
for (i = 0; i < sizeof(SCSILookupTable)/sizeof(struct SCSILookupTableElement); i++)
{
if ( (SCSILookupTable[i].key == key || SCSILookupTable[i].key == 0xff)
&& SCSILookupTable[i].asc == asc
&& SCSILookupTable[i].ascq == ascq)
{
return SCSILookupTable[i].errorcondition;
}
}

return "Unknown error";
}


void main()
{
printf ("%s\n", SCSIErrortext(0, 0x5d, 0));
printf ("%s\n", SCSIErrortext(0xfe, 0x05, 0));
printf ("%s\n", SCSIErrortext(0x00, 0x05, 0));
}

它再简单不过了,尽管肯定还有改进的空间。

关于c - SCSI 感知到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26712177/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com