gpt4 book ai didi

c - scsi 错误代码和字符串转换

转载 作者:行者123 更新时间:2023-11-30 17:37:30 25 4
gpt4 key购买 nike

我想知道将错误代码映射到字符串的最佳方法是什么,例如在 SCSI 协议(protocol)中,错误总是以数字形式返回。像这样:

00h GOOD
02h CHECK CONDITION
04h CONDITION MET
08h BUSY
18h RESERVATION CONFLICT
28h TASK SET FULL
30h ACA ACTIVE
40h TASK ABORTED

我想知道将这些代码即时翻译为字符串对应项的最佳方法是什么?我想过做一个数组或其他东西,但 Ig 必须制作一个长度为 40h 的数组,即使我不会使用大部分索引。那么,创建一个以数字作为输入并返回字符串的函数的最佳方法是吗?

最佳答案

这有点棘手,但您可以尝试使用 X-macro .

#include <stdio.h>

#define SCSI_ERR_TABLE \
X(GOOD, "good", 0x00) \
X(CHECK_CONDITION, "check condition", 0x02) \
X(CONDITION_MET, "condition met", 0x04) \
X(BUSY, "busy", 0x08) \

#define X(ERR, STR, ID) ERR = ID,
enum {
SCSI_ERR_TABLE
};
#undef X


#define X(ERR, STR, ID) {.id = ID, .string = STR},
static const struct {
int id;
char string[32];
} scsi_err_strings[] = { SCSI_ERR_TABLE };
#undef X

const char *scsi_get_err_string(int error)
{
for (int i = 0; i < sizeof(scsi_err_strings) / sizeof(scsi_err_strings[0]); i++) {
if (scsi_err_strings[i].id == error)
return scsi_err_strings[i].string;
}

return NULL;
}

int main(void)
{
int err;

err = CHECK_CONDITION;
printf("%d -> %s\n", err, scsi_get_err_string(err));

err = BUSY;
printf("%d -> %s\n", err, scsi_get_err_string(err));

return 0;
}

关于c - scsi 错误代码和字符串转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22380235/

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