【发布时间】:2019-05-20 15:10:54
【问题描述】:
我正在与需要使用十六进制将密码嵌入命令的设备进行通信。密码必须为 8 个字节。如果 ASCII 数字密码少于 16 位,则密码用 F 填充。
例如,如果密码是 12345,我需要能够将密码转换为 0x12 0x34 0x5F 0xFF 0xFF 0xFF 0xFF 0xFF。
我不确定如何从“12”获取 0x12。
我在考虑是否可以将 1 转换为 0x10 并将 2 转换为 0x02,然后我可以将这两个字节相加得到 0x12。但是,有没有一种方法可以在不必创建哈希表的情况下获取 0x10 和 0x02,或者有更好的方法吗?
编辑:对于任何粗鲁到拒绝投票的人。这是一个独特的问题,我不希望简单地获取 12345 的十六进制值,其中十六进制表示为 31 32 33 34 35。如果该问题中的其他答案之一确实如此涵盖这一点,这至少提供了直接提出问题的问题的答案。我打算研究一下位移,链接问题的答案就在我的脑海中飞过。如果这个网站旨在促进学习,那么我们就不能有一个包罗万象的部分,因为答案太复杂,无法帮助外行学习。
【问题讨论】:
-
将字符转换为整数,然后您可以使用按位或操作组合两个整数。
byte foo = (digit1 << 4) | (digit2 & 0xF); -
如果密码中有非数字字符怎么办?
-
Jeroen,我不同意,这是不同的,因为输入是 ascii,我没有将简单的 ascii 字符转换为字节。
-
谢谢 itsme86。现在试一试。一旦我完成了这项工作,我将为其他有类似问题的人发布源代码。
标签: c# .net-cf-3.5