这篇文章主要围绕将UUID32个字符的十六进制字符串转换为“YouTube风格”的简短ID,然后返回展开,旨在为您提供一份详细的参考资料。我们将全面介绍将UUID32个字符的十六进制字符串转换为“Yo
这篇文章主要围绕将UUID 32个字符的十六进制字符串转换为“ YouTube风格”的简短ID,然后返回展开,旨在为您提供一份详细的参考资料。我们将全面介绍将UUID 32个字符的十六进制字符串转换为“ YouTube风格”的简短ID,然后返回,同时也会为您带来Arduino:将十六进制字符串转换为uint64或十进制字符串、c# – 如何在转换为十六进制字符串或从十六进制字符串转换时设置字节顺序、c# – 将十六进制字符串转换为颜色、C++ 中 char 类型的十六进制字符串转换成字节流的实用方法。
本文目录一览:- 将UUID 32个字符的十六进制字符串转换为“ YouTube风格”的简短ID,然后返回
- Arduino:将十六进制字符串转换为uint64或十进制字符串
- c# – 如何在转换为十六进制字符串或从十六进制字符串转换时设置字节顺序
- c# – 将十六进制字符串转换为颜色
- C++ 中 char 类型的十六进制字符串转换成字节流
将UUID 32个字符的十六进制字符串转换为“ YouTube风格”的简短ID,然后返回
我正在使用uuid.uuid1()为我的所有MongoDB文档分配一个GUID。我想要一种导出11个字符的唯一,区分大小写的类YouTubeID的方法,例如
1_XmY09uRJ4
来自uuid的十六进制字符串,看起来像
ae0a0c98-f1e5-11e1-9t2b-1231381dac60
我希望能够将缩短的ID动态匹配到十六进制,反之亦然,而不必在数据库中存储另一个字符串。有没有人有一些示例代码,或者可以指出我可以执行此操作的模块或公式的方向?
答案1
小编典典将基础字节转换为base64值,去除=
填充和换行符。
您可能希望使用该base64.urlsafe_b64encode()
函数来避免使用/
and+
(_
和和-
代替),因此所得的字符串可以用作URL路径元素:
>>> import uuid, base64>>> base64.urlsafe_b64encode(uuid.uuid1().bytes).rstrip(b''='').decode(''ascii'')''81CMD_bOEeGbPwAjMtYnhg''
相反:
>>> uuid.UUID(bytes=base64.urlsafe_b64decode(''81CMD_bOEeGbPwAjMtYnhg'' + ''==''))UUID(''f3508c0f-f6ce-11e1-9b3f-002332d62786'')
要将其转换为通用函数:
from base64 import urlsafe_b64decode, urlsafe_b64encodefrom uuid import UUIDdef uuid2slug(uuidstring): return urlsafe_b64encode(UUID(uuidstring).bytes).rstrip(b''='').decode(''ascii'')def slug2uuid(slug): return str(UUID(bytes=urlsafe_b64decode(slug + ''=='')))
这为您提供了一种以更紧凑的形式表示16字节UUID的方法。进一步压缩会丢失信息,这意味着您无法再次将其解压缩为完整的UUID。16个字节可以表示的所有值的范围将永远不会适合22个base64字符以内的字符,每三个输入字节需要4个字符,每个字符编码6位信息。
因此,YouTube的唯一字符串不是基于完整的16字节UUID,它们的11个字符ID可能存储在数据库中以便于查找,并且基于较小的值。
Arduino:将十六进制字符串转换为uint64或十进制字符串
我已经看到了其他答案(convert HEX string to Decimal in arduino)并使用strtoul实现了一个解决方案,但它只适用于32位整数,并且strtoull不可用.
uint64_t res = 0; String datatosend = String("43a2be2a42380"); char charBuf[datatosend.length() + 1]; datatosend.tochararray(charBuf,datatosend.length() + 1) ; res = strtoul(charBuf,NULL,16);
如何使用Arduino获取大十六进制字符串/字节数组的十进制数?
解决方法
#include <stdio.h> #include <stdint.h> #include <ctype.h> uint64_t getUInt64fromHex(char const *str) { uint64_t accumulator = 0; for (size_t i = 0 ; isxdigit((unsigned char)str[i]) ; ++i) { char c = str[i]; accumulator *= 16; if (isdigit(c)) /* '0' .. '9'*/ accumulator += c - '0'; else if (isupper(c)) /* 'A' .. 'F'*/ accumulator += c - 'A' + 10; else /* 'a' .. 'f'*/ accumulator += c - 'a' + 10; } return accumulator; } int main(void) { printf("%llu\n",(long long unsigned)getUInt64fromHex("43a2be2a42380")); return 0; }
c# – 如何在转换为十六进制字符串或从十六进制字符串转换时设置字节顺序
int target = 250; string hexString = target.ToString("X4");
要从十六进制格式的字符串中获取整数值,我使用Parse方法:
int answer = int.Parse(data,System.Globalization.NumberStyles.Hexnumber);
然而,我正在交换数据的机器以相反的顺序放置字节.
为了保持样本数据,如果我想发送值250我需要一个字符串“FA00”(不是00FA,这是hexString是什么)同样,如果我得到“FA00”我需要将其转换为250而不是64000.
如何设置这两种转换方法的字节顺序?
解决方法
int otherEndian = (value << 16) | (((uint)value) >> 16);
c# – 将十六进制字符串转换为颜色
我的QueryString是urlencoded所以重要的部分看起来像:
QueryString...&color=%23AA4643
以下是我试过的方法.FromArg:
string sColor = Request.QueryString["color"]; // sColor is Now #AA4643 Int32 iColorInt = Convert.ToInt32(sColor,16); //Get error message - Could not find any recognizable digits Color curveColor = System.Drawing.Color.FromArgb(iColorInt); //Never makes it here
以下是我的尝试.FromHtml:
string sColor = Request.QueryString["color"]; System.Drawing.Color myColor = new System.Drawing.Color(); myColor = System.Drawing.ColorTranslator.FromHtml(sColor);
在这种情况下,myColor设置为 – myColor =“{Name = ffaa4643,ARGB =(255,170,70,67)}”
但是当我去使用它时,我收到一个错误:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
任何和所有的帮助非常感谢
解决方法
string sColor = Request.QueryString["color"]; // sColor is Now #AA4643 Int32 iColorInt = Convert.ToInt32(sColor.Substring(1),16); Color curveColor = System.Drawing.Color.FromArgb(iColorInt);
C++ 中 char 类型的十六进制字符串转换成字节流
如 a [5]="1234" 转换成 a [5]={0x12,0x34}
代码如下:
void HexStrToByte(const char* source, unsigned char* dest, int sourceLen)
{
short i;
unsigned char highByte, lowByte;
for (i = 0; i < sourceLen; i += 2)
{
highByte = toupper(source[i]);
lowByte = toupper(source[i + 1]);
if (highByte > 0x39)
highByte -= 0x37;
else
highByte -= 0x30;
if (lowByte > 0x39)
lowByte -= 0x37;
else
lowByte -= 0x30;
dest[i / 2] = (highByte << 4) | lowByte;
}
return ;
}
int main(void)
{
BYTE bufASC[1024]={0};
char ha[7] = "ef2233";
unsigned char temp[200]={0};
HexStrToByte(ha,temp,6);
我们今天的关于将UUID 32个字符的十六进制字符串转换为“ YouTube风格”的简短ID,然后返回的分享就到这里,谢谢您的阅读,如果想了解更多关于Arduino:将十六进制字符串转换为uint64或十进制字符串、c# – 如何在转换为十六进制字符串或从十六进制字符串转换时设置字节顺序、c# – 将十六进制字符串转换为颜色、C++ 中 char 类型的十六进制字符串转换成字节流的相关信息,可以在本站进行搜索。
本文标签: