首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为整型C#的FourCC

作为整型C#的FourCC
EN

Stack Overflow用户
提问于 2013-05-31 00:55:36
回答 1查看 2.3K关注 0票数 0

我正在与一个软件开发工具包,这需要一个AVI编解码器作为一个8位整数表示的FourCC值传递。ASCII值是WVC1,我曾尝试为每个字符将FourCC转换为相应的int值,我认为应该是87864301,但这是不正确的。

有没有人知道有没有一组标准的整数值来表示FourCC的值,或者用某种方法来转换它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-31 02:14:34

http://msdn.microsoft.com/en-us/library/windows/desktop/dd375802(v=vs.85).aspx建议FOURCC的字符需要是十六进制值,并且在转换之前颠倒过来。

这是一个使用的示例控制台应用程序,它与它们的YUY2值(WVC1 = 31435657)相匹配。更新代码,包括大端/小端和GUID转换。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FourCC
{
    class Program
    {
        static void Main(string[] args)
        {
            string fourCC = "YUY2";

            Console.WriteLine("Big endian value of {0} is {1}", fourCC, ConvertFourCC(fourCC, toBigEndian:true));
            Console.WriteLine("Little endian value of {0} is {1}", fourCC, ConvertFourCC(fourCC));
            Console.WriteLine("GUID value of {0} is {1}", fourCC, ConvertFourCC(fourCC, toGuid:true));
            Console.ReadKey();

        }

        static string ConvertFourCC(string fourCC, bool toBigEndian = false, bool toGuid = false)
        {
            if (!String.IsNullOrWhiteSpace(fourCC))
            {
                if (fourCC.Length != 4)
                {
                    throw new FormatException("FOURCC length must be four characters");                    
                }
                else
                {
                    char[] c = fourCC.ToCharArray();

                    if (toBigEndian)
                    {
                        return String.Format("{0:X}", (c[0] << 24| c[1] << 16 | c[2] << 8 | c[3]));
                    }
                    else if (toGuid)
                    {
                        return String.Format("{0:X}", (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0]) + "-0000-0010-8000-00AA00389B71";
                    }
                    else
                    {
                        return String.Format("{0:X}", (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0]);
                    }
                }
            }
            return null;
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16841858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档