Error handling “这一点背后的理由是什么?”;0xHHHHHHHHHHHHHQ";格式化的Microsoft错误代码?

Error handling “这一点背后的理由是什么?”;0xHHHHHHHHHHHHHQ";格式化的Microsoft错误代码?,error-handling,Error Handling,为什么微软倾向于将“错误代码”报告为十六进制值 错误代码是32位双字值(4字节值)。这可能是报告错误的任何C风格函数的原始整数返回代码 但是,为什么要用十六进制向用户报告错误?“0x”前缀一文不值,字符长度的节省也很小。这些错误最终会在Microsoft软件甚至Microsoft网站上显示给最终用户 例如: 0x80302010的长度为10个字符,非常神秘 2150637584是十进制的等价物,并且更加方便用户 对于32位字段作为错误代码机制的“标准”使用(可能将字段划分为多个字段以供开发人

为什么微软倾向于将“错误代码”报告为十六进制值

错误代码是32位双字值(4字节值)。这可能是报告错误的任何C风格函数的原始整数返回代码

但是,为什么要用十六进制向用户报告错误?“0x”前缀一文不值,字符长度的节省也很小。这些错误最终会在Microsoft软件甚至Microsoft网站上显示给最终用户

例如:

  • 0x80302010的长度为10个字符,非常神秘
  • 2150637584是十进制的等价物,并且更加方便用户

对于32位字段作为错误代码机制的“标准”使用(可能将字段划分为多个字段以供开发人员解释)或向最终用户呈现十六进制代码背后的逻辑,是否有任何描述?

我们只能猜测原因,因此无法肯定回答这个问题。但让我们猜猜看:

一个原因可能是,对于十六进制数,您知道数字将有8位数字。如果数字多或少,则表示该数字“已损坏”(例如,客户输入错误)。对于十进制数,相同值的位数不同


此外,对于开发人员来说,十六进制数比十进制数更方便、更自然。例如,如果某些信息被编码为位标志,您可以用十六进制数字而不是十进制数字手动破译它们。

对于十六进制或十进制错误代码是否更方便用户,这有点主观。这里是一个十六进制错误代码非常方便的场景,这可能是首先使用十六进制错误代码的部分原因

考虑文档,ADSI使用格式为
0x8007XXXX
的错误代码,其中
XXXX
对应于映射到Win32错误代码的DWORD值


这使得获取相应的Win32错误代码非常容易,因为您可以去掉最后4位数字。这在十进制错误代码表示法中是不可能的。

中间的答案是,将数字格式化为IPv4地址会更方便,同时保留一些有助于开发人员的格式


尽管我认为hex是好的,但假设的非技术用户并不知道0x1234ABCD的含义,而不是1234101112或“fwip阀上的开裂梯形销”。

2150637584如何更方便用户?您缺少了对HRESULT错误代码工作方式的重要了解。32位整数中包含4条信息。错误的严重性,无论是系统错误还是应用程序定义的错误,生成错误的库类型以及错误代码。当您得到十六进制版本的错误时,您可以立即看到这些错误。十进制版本需要启动calc.exe才能将其转换为十六进制。查看WinError.h SDK头文件中的定义。它更方便用户,因为它删除了“0x”。我说的是最终用户,而不是开发人员。因为最终用户倾向于搜索错误代码。这似乎是一种很好的惯例。除了我讨厌的老朋友,dll加载时找不到的文件,我还发现了可能经常发生的错误。即使当一个程序给我这个错误时,我并没有费心去解决诸如终端用户之类的问题。