我有一个由十六进制值表示的字节数组,这些是持续时间。数据可以转换为整数值并乘以常数以获得时序。数据解码将作为一系列十六进制字符串保存到文件中。什么是操纵十六进制值的有效方法?
我在处理数据格式时正在考虑性能问题,因为我必须在不同阶段使用多种格式(计算,数据显示等)。大多数示例显示从byte []到十六进制字符串(“1A 3C D4”)的转换,反之亦然,但我正在寻找替代方案,即转换为Int16并使用char []数组。
答案 0 :(得分:5)
您没有表示十六进制值的字节数组。你有一个代表数字的字节数组。您表示数字的基数仅在您表示时与相关。
换句话说:如果你认为你的字节数组代表十进制整数,你觉得它会有什么不同?如果我以英尺而不是米来表示它,我的身高是不同的吗?
现在,如果你试图表示16位数字,我建议使用字节数组是一个坏主意。请改用ushort[]
或short[]
,因为是 16位值。如果您在将数据添加到这样的数组中时遇到问题,请提供详细信息...同样,如果您在操作方面有任何其他问题。请注意,在您将数据写为 text 之前,就计算机而言,实际上并没有基于它的概念。
(注意,这对于浮点值是不同的,其中数据实际上 在小数和双精度之间是不同的,例如......在那里,表示的基础是数据格式。它不适用于整数。或者,您可以将所有整数视为二进制,直到您决定将它们格式化为文本...)
答案 1 :(得分:0)
来自MSDN:
十六进制(“X”)格式说明符 将数字转换为字符串 十六进制数字。的情况 格式说明符指示是否 使用大写或小写字符 对于十六进制数字 大于9.例如,使用“X” 生成“ABCDEF”和“x” 产生“abcdef”。这种格式是 仅支持整数类型。
精度说明符表示 所需的最小位数 结果字符串。如果需要, 数字用零填充到其中 留下来产生位数 由精度说明符给出。
byte x = 60;
string hex = String.Format("0x{0:X4}", x);
Console.WriteLine(hex); // prints "0x003C"