如何将 char 数组转换为表示其 ascii 值的整数?

发布于 2024-12-17 07:03:57 字数 141 浏览 0 评论 0原文

我有一个 4 个字符的数组,我需要他的 ascii 值在一个数字中。 例如数组中是“joh0”。结果应为十六进制 0x6a726f00 或 int 111617776。 我在函数 ntohl(int x) 中使用它。

I have a array of 4 chars and i need his ascii value in a single number.
For example in the array is "joh0". The result should be in hex 0x6a726f00 or in int 111617776.
I use it in the function ntohl(int x).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

女中豪杰 2024-12-24 07:03:57

从你的描述来看,这听起来像是你想要的(可能交换了索引):

char str[] = "joh0";

uint32_t val = (uint32_t)str[0]
             | (uint32_t)str[1] << 8
             | (uint32_t)str[2] << 16
             | (uint32_t)str[3] << 24;

但我不知道你从哪里得到 106111104048 。

From your description, it sounds like what you want this (possibly with the indices swapped):

char str[] = "joh0";

uint32_t val = (uint32_t)str[0]
             | (uint32_t)str[1] << 8
             | (uint32_t)str[2] << 16
             | (uint32_t)str[3] << 24;

But I don't know where you're getting 106111104048 from.

我喜欢麦丽素 2024-12-24 07:03:57

我假设您是通过这种方式获取样本编号的:

Decimal:   106 111 104 048
Character: j   o   h   0

如果是这种情况,您的编号将不适合 32 位整数值。您需要使用更大的数据类型,例如 uint64_tunsigned long long。您需要类似以下内容:

const char str[] = "joh0";

unsigned long long result = ((unsigned long long)str[0])
                          + ((unsigned long long)str[1] * 1000LLU)
                          + ((unsigned long long)str[2] * 1000000LLU)
                          + ((unsigned long long)str[3] * 1000000000LLU);

I presume that you're getting the sample number in this way:

Decimal:   106 111 104 048
Character: j   o   h   0

If that's the case, your number won't fit into a 32-bit integer value. You'll need to use a larger datatype like uint64_t or unsigned long long. You need something like the following:

const char str[] = "joh0";

unsigned long long result = ((unsigned long long)str[0])
                          + ((unsigned long long)str[1] * 1000LLU)
                          + ((unsigned long long)str[2] * 1000000LLU)
                          + ((unsigned long long)str[3] * 1000000000LLU);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文