【问题标题】:directly cast a char *nib as int hex直接将 char *nib 转换为 int hex
【发布时间】:2019-06-13 19:45:22
【问题描述】:

纯便携的c。

所以我无法从变量中转换必须是变量的内容。 char *nib 到 int hex。我的想法是我有一个 char *nib ="ab";或“0xab”或直接将两个字符表示为 char * 的任何内容。然后将其转换为整数。并将其写入文件以获得一对一的写入。所以我从 char *nib="0xab";然后我大概把它写成一个 int,然后写成一个 hexdump 或编辑,结果就是 ab。

我已经能够将其作为一个常量直接声明...但笔尖始终是静态的。

这必须是一对一的,以两个字符的字符串或 nib 开头。不转换任何东西,纯铸造。

那么你可以直接将其写入文件而不进行转换吗?对于具有名称长度的值而言,三个查找表似乎有点多

【问题讨论】:

  • 不能将代表数字的文本转换为数字。例如,您需要使用 atoi 函数进行转换
  • 与您实际询问的内容无关,但为什么将其称为nib?半字节是半字节(4 位),但ab0xab 是 1 字节(8 位)的十六进制表示。
  • @P__J__ 听起来像 OP 实际上不需要从可读字符串开始 - " 或任何直接将两个字符表示为 char *" 的东西......也许 "\x0a\x0b" 就是他们的意思是从什么开始的? (对于int 来说仍然不够,并且在存储到文件时不太可能便携......但比“ab”更好)
  • 位是半字节? nyb 是半点?
  • (旁注:@mistermista 请在使用标签之前阅读标签信息 - 您作为标签添加到这篇文章的“nib”与字节无关,而是与 OSX 文件格式无关 - @987654321 @)

标签: c casting binary hex


【解决方案1】:

无法将 2 个字符(2 个字节)转换为一个字节,因为转换不会改变值的二进制表示。

最接近您可以将看起来像十六进制的字符串转换为会显示类似内容的值的方法是通过转义序列使用 0-15 个字符,例如 char* nib = "\x0A\x0B" 并将 (*((short*)nib)) 转换为 2 字节值 ( 0x0A0B 在这种情况下)并将其存储到文件中(我不确定是否有 portable 整数类型的 2 字节 - short 通常是 2 字节宽,但不一定是2 个字节)。不幸的是,我认为没有一种可移植的方式将 2 字节整数值存储到文件中,因为不同的架构可能具有不同的字节顺序。

逐个字符地写入字符串值可能是最安全的方法。或者将字符串转换为 intusual way 并使用您自己的整数读/写代码来确保可移植性。

【讨论】:

    猜你喜欢
    • 2012-06-01
    • 2011-07-03
    • 2015-07-11
    • 2020-04-15
    • 2014-04-17
    • 2012-01-16
    • 1970-01-01
    • 2016-03-23
    • 2011-06-02
    相关资源
    最近更新 更多