将十六进制字符串转换为相同格式的长字符串[重复]

Posted

技术标签:

【中文标题】将十六进制字符串转换为相同格式的长字符串[重复]【英文标题】:Convert hexadecimal string to long in the same format [duplicate] 【发布时间】:2020-10-15 07:31:36 【问题描述】:

我有这个代码:

string IDNumber = "0x0037D70D";

long x = 0x0037D70D; //Working

long x = long.Parse(IDNumber); //Error Input string was not in a correct format.

需要将上面的字符串 (IDNumber) 发送到 long y,并且应该保持变量格式和典型值,因为它以 0x.... 开头,与 IDNumber 字符串中的相同

请帮助我。

编辑:

我在 DLL 文件中有一个函数,这个函数接受一个数据类型为 long 的参数

如果我给这个长参数提供像 0x0037D70D 这样的值,那么函数可以正常工作并完成所需的工作,但是如果我给长参数提供任何其他格式的值,比如 3659533,函数就不起作用

string example1 = "0x0037D70D";
long example2 = 0x0037D70D;

最后,我得到了字符串格式的值,例如 example1,我想将其转换为 example2,因为如果我将值写成 example2 格式并保存在 long 变量中,那么它就可以工作

更新: 问题解决了,我使用此功能与外部硬件设备进行通信,多次尝试设备挂起后,我让设备休息,@Kirill Polishchuk 建议的解决方案为我工作。

long l = Convert.ToInt64(IDNumber, 16);

【问题讨论】:

这个副本回答了你的问题:Convert integer to hexadecimal and back again 请包括您收到的错误。 @Ňɏssa Pøngjǣrdenlarp 这不是这种情况,因为我想将十六进制保留在 long 变量中而不将其转换为整数 @John 我得到的错误是输入字符串的格式不正确。 long 是“长整数”的缩写。十六进制是二进制数据的字符串表示形式。 【参考方案1】:

你应该去掉0x前缀:

long y = long.Parse(IDNumber.Replace("0x", ""), System.Globalization.NumberStyles.HexNumber);
long x = 0x0037D70D; //Working
Console.WriteLine(x.ToString("X")); //prints "37D70D", no prefix

【讨论】:

【参考方案2】:

我建议使用Convert 类:

long l = Convert.ToInt64(IDNumber, 16);

【讨论】:

这会将十六进制转换为整数,结果将是 3659533 而不是 0x0037D70D @WaleedELerksosy ...那到底有什么问题? 0x0037D70D is a hexadecimal representation of 3659533。你还能做什么?如果您希望它是十六进制(字符串)格式,为什么要将其转换为长格式? 我在 DLL 文件中有一个函数,这个函数接受一个数据类型为 long 的参数如果我给这个参数一个像 0x0037D70D 这样的值,那么这个函数可以正常工作并完成所需的工作,但如果我在任何其他格式,如 3659533 函数都不起作用 string example1 = "0x0037D70D";长示例2 = 0x0037D70D;最后,我得到了像 example1 这样的字符串格式的值,我想将其转换为 example2,因为如果我有像 example2 这样写的值,那么它就可以工作 谢谢,问题解决了:) @WaleedELerksosy,酷

以上是关于将十六进制字符串转换为相同格式的长字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我正在使用二进制阅读器将字符串转换为字节,如何将字节反转回相同的字符串 [重复]

在android中将字节[]转换为十六进制字符串[重复]

使用相同的表示将二进制字符串转换为int

程序设计:将一个数字字符串转换成与其面值相同的长整型整数

将十进制转换为小数点后两个零的字符串,和逗号? C# [重复]

将一个数字字符串转换成与其面值相同的长整形整数